Linux - ntuf/Tips GitHub Wiki
Linuxの基本的な構造
Linuxは大きく以下のような構成になっています:
1.カーネル (Kernel)
Linuxの中心部分で、ハードウェアとソフトウェアの橋渡しをします。
メモリ管理、プロセス管理、デバイス制御、ファイルシステムなど、最も低レベルな処理を担当します。
例えるなら「OSの心臓部」です。
2.ユーザーランド (Userland)
ユーザーやアプリケーションが直接触れる部分で、さまざまなプログラムやライブラリが含まれます。
主な構成要素:
シェル: ユーザーがコマンドを入力して操作するためのプログラム(例: Bash)。
ユーティリティ: ファイル操作、ネットワーク設定などのツール群。
デスクトップ環境: GUIを提供するもの(例: GNOME、KDE)。
3.初期化システム (Init System)
Linuxを起動した際に、カーネルから引き継ぎ、システム全体の準備を行うソフトウェアです。
systemdはこの「初期化システム」の1つとして動作します。
—
systemdはPID(プロセスID)が1のプロセス。
Linuxのシステムの仕組みをWindowsに例えると、以下のように比較できます。
Windowsを使い慣れている視点で見ると、
Linuxの各部分がどのような役割を果たしているかをイメージしやすくなると思います。
1. カーネル(Kernel)
Linux
Linuxカーネルは、ハードウェア(CPU、メモリ、ストレージ、ネットワークカードなど)と
ソフトウェアをつなぐ、Linuxシステムの中核部分です。
メモリ管理、プロセス管理、ファイルシステム操作などを担当します。
Windows
Windowsでいうと、NTカーネルに相当します。Windowsのカーネルも同様に、
ハードウェアリソースを管理し、アプリケーションが動作できる基盤を提供します。
(Windows11でもwindowsNT系としてNTカーネルで動いている)
2. シェル(Shell)
Linux
シェルは、ユーザーがコマンドを入力してシステムを操作するためのプログラムです(例: Bash、Zsh)。
グラフィカルユーザーインターフェース(GUI)がなくても、シェルだけでシステムを操作できます。
Windows
Windowsでのシェルに相当するのは、コマンドプロンプト(cmd.exe)やPowerShellです。
ただし、WindowsユーザーはGUIを使うことが一般的で、LinuxはCLI(コマンドラインインターフェース)が
中心的な役割を果たします。
3. デスクトップ環境(Desktop Environment)
Linux
Linuxでは、デスクトップ環境がカーネルと分離しており、必要に応じて選択可能です。
例: GNOME、KDE、XFCE、MATEなど。
デスクトップ環境は、アイコン、ウィンドウ、メニューなどのグラフィカルな操作を提供します。
Windows
Windowsでは、**エクスプローラー(Windows Explorer)**がこの役割を担っています。
エクスプローラーは固定的で、Linuxのように別の環境に切り替えることはできません。
4. 初期化システム(Init System)
Linux
Linuxでは、システム起動時にまず**initシステム(例: systemd、SysVinit、Upstart)**が動きます。
起動後、必要なサービス(例: ネットワーク、ログ管理、デーモン)を順に立ち上げます。
Windows
Windowsでは、起動時にサービスマネージャーが働き、バックグラウンドで動作するサービス
(例: Windows Update、プリンタサービス)を管理します。
initシステムとWindowsサービスマネージャーは似た役割を持っています。
5. ファイルシステム(File System)
Linux
Linuxは、さまざまなファイルシステム(例: ext4、XFS、Btrfs)をサポートし、
すべてが1つのディレクトリツリー(/)の下にマウントされます。
例: /home、/var、/etc など。
Windows
Windowsでは、ファイルシステムにNTFSやFAT32が使われます。
ドライブレター(例: C:\, D:\)でファイルシステムを分けて扱う点がLinuxと異なります。
6. ソフトウェアパッケージとインストール
Linux
Linuxでは、ソフトウェアはパッケージ管理システム(例: apt、yum、dnf、pacman)を使ってインストールします。
例: sudo apt install firefox
依存関係も自動で解決されるため、効率的です。
Windows
Windowsでは、ソフトウェアのインストールは主に**インストーラー(.exe、.msi)**を使います。
最近では、WindowsストアやWinget(Windows Package Manager)も登場し、
Linuxに近い形でソフトウェア管理が可能です。
7. ユーザー管理
Linux
Linuxは、マルチユーザーシステムとして設計されており、各ユーザーにホームディレクトリ
(例: /home/username)が割り当てられます。
管理者権限を持つ「rootユーザー」が存在します。
Windows
Windowsでもマルチユーザーシステムですが、各ユーザーのデータはC:\Users\ユーザー名に保存されます。
管理者(Administrator)アカウントがrootに相当します。
8. ログと監視
Linux
Linuxでは、システムログは/var/logに保存され、journalctlなどのツールで確認します。
デーモン(バックグラウンドプロセス)もログを記録します。
Windows
Windowsでは、システムログはイベントビューアで確認できます(例: アプリケーションログ、セキュリティログ)。
—
free
空きメモリ
df
空き容量
Disk Free の略
df -i
iノードの確認
du
特定ディレクトリ以下の使用量
du -sk /var/* | sort -nr | head -5 容量順にソートして表示される
Disk Usageの略
pvdisplay
物理ディスクの空き容量
物理ボリューム (Physical Volume) をDisplayする略
Listenしているポート一覧
netstat -nlt
network statisticsの略
プロセス一覧 特定のポートを使用している
List Open Filesの略
lsof -i:111
プロセス一覧 特定のファイルを使用しているプロセスを表示
lsof /var/log/messages
プロセスが掴んでいるファイル一覧を
lsof -p
rpm
Red Hat Package Managerの略
Red Hat系ディストリビューションで使われるパッケージ管理システム
yum
Yellowdog Updater, Modifiedの略
RPMパッケージを扱うためのツール
sudo yum install
dnf
Dandified YUMの略で、YUMの後継として開発されたパッケージ管理システム
apt
sudo apt install <パッケージ名>
Debian系のパッケージ管理Ubuntuとかrasberrypyとか
ユーザーの作成
sudo useradd -m username
-m: ホームディレクトリを作成する
パスワードの設定
sudo passwd username
グループの作成
sudo groupadd groupname
ユーザーをグループに追加
sudo usermod -aG groupname username
-aG: 補足的なグループに追加(他のグループは維持)
CI/CDが必要になる要因
①開発者の数
人数が多いほど恩恵が受けられる
②リリース頻度
③デプロイ作業の面倒さ・リスク
環境が複雑であれば事故が起きやすい
④品質要求の高さ
CI(自動テスト)の必要性が高まる
⑤コードの寿命
短い寿命ならいらない
⑥インフラ環境
クラウド:AWSなど
IaC(Infrastructure as Code)構成のコード化
本番/ステージング環境に分かれている
-
■cronの設定
cronをroot権限で開く
crontab -u root -e
crontab -e cronを編集する
crontab -l cronを表示する
毎月10日の午前4時59分に/home/test01/test.shを実行する
59 04 10 * * /home/test01/test.sh
毎週月曜日の9時と12時にdateコマンドの出力結果を/root/prac/date.logに追記する
0 9,12 * * 1 date >> /root/prac/date.log
2時間ごとにdateコマンドの出力結果を/root/prac/date.logに追記する
0 */2 * * 1 date >> /root/prac/date.log
1分毎に日時を対象ファイルに吐き出す
*/1 * * * * date >> /root/prac/date.log
/etc/crontab
システム用。root権限で実行
設定ファイル/etc/crontab
/var/spool/cron/crontabs/[user]
ユーザ用。各ユーザーで利用
設定ファイル/var/spool/cron/crontabs/[user]
『新しいLinuxの教科書』
■Linuxを使う
suコマンド
管理者ユーザになる
シャットダウンコマンド
shutdown -h now hオプションは電源断
ちなみにEC2で実施すると、
shutdown -r now rオプションは再起動
コマンドが見つからない場合は
/sbin/shutdown -h now
grep abc sample.txt | sort
このパイプは入出力プログラム間でやりとりできる
✔ 開始コマンドは stdout を持つもの。
✔ 中継コマンドは stdin を受け取って stdout に出せるもの。
✔ 終端コマンドは stdin を受け取れるもの。
-
■シェルの種類
sh
最も古いシェル。
シェルスクリプトを書く際にはshを利用するのが現在でも一般的
ログインシェルとして使われることはほとんどない
csh
Cシェル。
shと比べて対話型操作ができるようになった
ほとんど使われない
bash
バッシュ。shを基本とした対話型操作を行える。
EC2なんかでもデフォルトのシェル。
tcsh
cshの後継。
FreeBSDでよく使われれる。
zsh
比較的新しいシェル。
人気高い。mac OSではCatalinaがデフォルトのログインシェル。
fish
この中で最も後発。
■コマンドラインの編集
ctrl+B 後退
ctrl+F 前進
ctrl+A 先頭
ctrl+E 末尾
meta(Alt)F 単語ごとに前進
meta(Alt)B 単語ごとに後退
vscodeでmetaキーを有効にする
VSCodeの設定を開く
メニューバーから「Code」 > 「Preferences」 > 「Settings」を選択するか、Cmd + , を押して設定を開きます。
設定の検索
設定検索バーに「terminal.integrated.macOptionIsMeta」と入力します。
terminal.integrated.macOptionIsMetaの設定を有効にする
■
Ctrl + s 画面表示をロックする
Ctrl + q 画面表示のロックを解除する
Ctrl + c コマンドの強制終了
Ctrl + l 画面を消去する
bashの補完機能
ec → Tab → echo
コマンド履歴
Ctrl + p, または ↑
Ctrl + n, または ↓
コマンド履歴の検索 インクリメンタル検索
Ctrl + r
■ディレクトリ構造
/bin
Linuxシステムの動作に最低限必要な重要度の高い
実行ファイルを置くためのディレクトリ
/dev
デバイスファイルを置くためのディレクトリ
デバイスファイルは、ハードウェアをファイルとして扱えるように用意されたファイル
/etc
各種アプリケーションの設定ファイルを置くためのディレクトリ
configファイルが置かれる
例
/etc/ssh/sshconfig ssh接続の設定
/etc/nginx/nginx.conf nginxの設定
/etc/nginx/conf.d/****_nginx.conf nginxの設定
/etc/nginx/ssl/fullchain.pem nginxのsslのpemファイルの置き場
/home
ユーザーごとのホームディレクトリが配置される
例
/home/ec2-user
/sbin
管理者向けの実行ファイルが配置されている
/tmp
テンポラリ
/usr
各種アプリケーションとそれらのファイルのを置く
内部にサブディレクトリとして、bin,sbin,etcなどを持っている
/var
変化する(variable)データを置くためのディレクトリ
データ、メール、ログなど
■ファイル操作の基本
tab で補完する
cd /usr/lo
cd /usr/local
ls ba*
baで始まるファイルの一覧が出てくる
ls ba?
baと任意の1文字のファイルが出てくる
ls
-l ファイルの属性も表示される
-a 隠しファイルも表示される
-F ファイルのファイル種別も表示される
-w 30 指定桁数で横幅で表示するここでは30
—quote-name
オプションは-aFのように続けて指定もできる
■ファイル操作の基本
コマンド
mkdir
ディレクトリを作成する
rm
削除を実施する
rmdir
空のディレクトリを削除する
空でないと削除できない
rm -r
ディレクトリがからでなくても削除される
touch
空っぽのファイルを作成する
cat
ファイルを表示する
less
ファイルをスクロール表示する
f 1画面下にスクロールする
b 1画面上にスクロールする
/を入力すると一番下の行にカーソルが移動して検索が可能になる、nを押すたびに候補が出てくる
q lessを終了する
cp
ファイルディレクトリをコピーする
mv
ファイルを移動する
ln
リンクを張る
ディレクトリに対しては作成できない
異なるディスク間では作成できない
利用方法
長いパスを省略できる
異なるバージョンを共存させる
■探す調べる
man
コマンドの使い方を調べる
man cat
which
フルパスを表示する
find ディレクトリ 条件 アクション
ファイル(名)を探す場合条件に以下を入れる
-name,-iname
find . -name file-l.txt -print
アクションは省略しても良い print は最も基本的で省略していい
find . -name ‘*.txt’ -print
や?などのワイルドカードを使用できる。シングルクォーとが必要
(この場合シングルクォーとで囲まないと、をbashのパス名展開と解釈してしまう)
・ファイル名の種類で探す(-type)
-type f 通常ファイル
-type d ディレクトリ
-type l シンボリックリンク
find . -type d -print
カレントディレクトリの下にあるディレクトリを列挙
・複数の検索条件の指定(-a)
find . -type f -a -name ‘*.txt’ -print
-aは省略可能
locate
パスの一部を指定してファイルを探す
findより高速
インストールされていない場合はインストールが必要
(locate -version コマンドで入っているかを探す)
dnf install mlocate(RedHat系ではmlocate)
sudo apt instaldl plocate (debian系はplocate)
その後
updatedb
を行ってデータベースを作る
lacate [オプション] <検索パターン>
データベースを検索するので高速
データベースを作成した時点でのファイルを検索できる
大文字小文字を区別しない
locate -i notes
ファイル名だけを検索
lacate -b python
複数条件を指定するとor条件になる
locate docs document
複数条件でand条件にする場合
locate -A bash doc
コマンドの使い方を調べる
—help オプション
どのコマンドでも共通
コマンドのマニュアルを参照する
man <調べたいコマンド名>
man -k <キーワード>
キーワードでマニュアルを探す
マニュアルのセクション番号
man <セクション番号> <名前>
man 1 crontab セクション1の(コマンド)のcrontabのマニュアルを表示
セクション番号
1 コマンド
2 システムコール
3 ライブラリ関数
4 デバイスファイル
5 ファイル形式
6 ゲーム
7 その他いろいろなもの
8 システム管理コマンド
9 カーネルルーチン
help <名前>
help cd cd コマンドのマニュアル表示
help help helpコマンドのヘルプを表示
which [オプション] <コマンド名>
Linuxのコマンドはツリーのどこかに存在している
catコマンドは/bin/catにファイルがある
ls -lf /bin/cat
コマンドの場所はパスで指定されている
echo $PATH
which cat
catコマンドのフルパスを表示する
which -a ping
ping コマンドを全てのサーチパスから検索
■テキストエディタ
vim —version
dnf install vim Redhat系 でVim をインストール
sudo apt install vim Debian系でVimをインストール
vimはviの後継
viでもvimを起動できる
vim の終了
:q
ファイルを開く
vim newfile.txt
ファイルの保存
:w
ファイルを保存せず終了
:q!
カーソルの移動
hjkl
文字を1文字削除する
x
文字の入力モードにする [ESCで抜ける]
i
カーソルの位置の右に文字を追加
a
- For details see man 4 crontabs
次の単語の先頭に移動
w
後方の単語の先頭に移動
b
記号も単語とみなされる
スペース区切りのみを単語の切れ目とするには大文字にする
スペース区切りで、次の単語の先頭へ
W
スペース区切りで、後方の単語の先頭へ
B
行頭への移動
0
行末への移動
$
1行目への移動
gg
最後の行への移動
G
カット = デリート
コピー = ヤンク
ペースト= プット
デリート
d$ 行末までをデリート
d0 行頭までをデリート
x,dl 1文字をデリート
プット
下の行と連結する(一つの行になる)
J
アンドゥ
u
Ctrl + r
リドゥ
検索と置換
/<文字列>
下方向に向かって検索
?<文字列>
上方向に向かって検索
n 次の検索結果に移動する
N 前の検索結果に移動する
%s/ <置換元文字列> / <置換後文字列> /g
vimtutor
vimのチュートリアル、基本を身につけられる
:help
ヘルプコマンド
上下に画面が分割されて、上側の画面にヘルプが表示される
■bashの設定
エイリアスを設定
ls -F
alias ls=‘ls -F’
ls だけでls -Fできる
type ls
lsは’ls -F’ のエイリアスです
type cp
cp /bin /cpです
エイリアスの削除
unalias ls
エイリアスを一時的に無効するように実行するには
フルパスを指定して実行する
/bin/ls
set -o/+ <オプション>
bashの各機能を有効/無効にできる
ignoreeof Ctrl+Dを押してもシェルを終了させない。誤ったキー操作でシェルを終了させない
noclobber 既に存在するファイルをリダイレクトしないで上書き
noglob パス名展開する(*などはシェルに解釈されず、そのまま*となる)
shopt -s/-u <オプション>
autocd ディレクトリ名のコマンドを実行するとそれがcdコマンドの引数に指定されたものとして時効できる
dotglob や?を使ったパス名展開の結果に,.で始まるファイルも含める
cdspell cdコマンド実行時、ディレクトリのちょっとしたミスタイプが自動修正される
globstar パス名展開で*というパターンを使うと、サブディレクトリまで含めたすべてのファイルにマッチする
histappend bashを終了する時、履歴ファイルにコマンド履歴を追記し、上書きしない
failglob パス名展開で指定したパターンがファイル名にマッチしなかった場合、コマンドを実行せずにエラーとする
lithist 複数行のコマンドを改行を含めてコマンド履歴に保存する。
シェル変数
<変数名>=<値>
var=‘test variable’
echoコマンド
=の左右にスペースは入れない、変数名がコマンドとみなされてしまう
PS1変数 設定した文字列がそのままプロンプトとして表示される
PS1=’bash> ’
bash>
PS1=’[\u]> ’
プロンプトにユーザー名を表示する
\d 曜日月日形式の日付
\h ホスト名の最初の.までの部分
\H ホスト名
\n 改行
\t HH:MM:SS形式の現在時刻
\u ユーザー名
\w カレントディレクトリ
\W カレントディレクトリの末尾のディレクトリ
\$ rootユーザの場合は、#,それ以外は$
\\ \そのもの
シェル変数のPATHには実体ファイルを探すディレクトリが指定されている
:区切りで連結されている
echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin/:/bin:/sbin
echo $LANG
ja_JP.UTF-8
基本的に日本語環境を指定している場合日本語
local -a
このコマンドでシステムがサポートしている言語の一覧が出てくる
LANG=en_US.UTF-8
これで切り替えられる
他のシェル変数
HISTFILE コマンドライン履歴を保存するファイル名
HISTLILESIZE 保存するコマンドライン履歴の最大行数
HISTSIZE コマンドライン履歴を保持する最大行数
シェルの状態を知るための変数
HOME ホームディレクトリ
SHELL ログインシェルのパス
PWD カレントディレクトリ
type set
type cp
printenv
環境変数の表示
export <シェル変数>
環境変数の設定
LESS=‘—no-init’
export LESS
LESSを環境変数として設定
bashの設定ファイル
基本的に~/.bashrc だけをいじっていればいい
Linuxが設定ファイルを読み込む順番
/etc/profile 最初に読み込まれるファイル
システム全体で使用するファイル。全てのユーザーに共通して設定する
~/.bash_profile 次に読みこむ(この中で.bashrcを読み込む)
ログインした時だけ読み込む(例 環境変数)
各ユーザー個別の設定ファイル
~/.bashrc さらに次に読み込む
bash起動するたびに読み込まれる
その内容を現在の
cp .bashhrc .bashrc.org
ミスをして消してしまってもバックアップをとっておけばOK
source ~/.bashrc
ファイル内容を即座に読み込んで実行する
■ファイルパーミッション、スーパーユーザー
ファイルにはオーナーが設定されている
オーナーはファイルのアクセス権限を自由に設定できる
touch testfile
ls -l testfile
ファイルのオーナーを確認できる
グループはユーザーの集まり
複数のグループに属することができる
groups コマンド
現在のユーザの所属しているグループの一覧を確認できる
ls -l /bin/cat
ファイルのパーミッションを表示できる
-rwxr-xr-x. 1 root root 54048 6月 10 2014 /bin/cat
rwx とr-xとr-xの3ブロックに分かれる
オーナー グループ その他 の順番
r 読み取り
w 書き込み
x 実行
ls -ld dir1
ディレクトリモ同様にパーミッション表示をできる
r 読み取り -ファイル一覧の取得
w 書き込み -ディレクトリ下のファイルの作成ディレクトリの作成
x 実行 -ディレクトリをカレントディレクトリにする
chmod ファイルモードの変更
chmodの演算子
+ 権限を追加する
- 権限を禁止する
= 指定した権限と等しくする
uオーナー
gグループ
oその他のユーザ
a ugoの全て
chmod u+w file.txt
オーナーの書き込み権限を追加
chmod g-w file.txt
グループの書き込み権限を削除
chmod go=r file.txt
複数のユーザーの権限をまとめて指定
数値によるパーミッションの変更
読み取り4
書き込み2
実行 1
足した値をオーナー、グループ、その他ユーザの順で入れる
chmod 755 file.txt
オーナーフルアクセス
グループは読み込みと実行
スーパーユーザ
一般ユーザでログイン後
su コマンドを実行
スーパーユーザで作業
exitで一般ユーザに戻る
一般ユーザの環境変数を引き継いだままスーパーになると
アプリケーションによってはうまく動作しないことなどがある
su -
でスーパーユーザの環境に初期化できる
sudo コマンド
コマンドを別のユーザで実行する
sudo cat /etc/shadow
スーパーユーザとしてcat できる
ずっとsuを使うのもリスキーなので、 sudoを使うのが一般的
ユーザーにsudoを許可するかは/etc/sudoersファイルで管理されている
cat /etc/sudoers
%wheel ALL=(ALL) ALL
wheelグループのユーザーはすべてのマシンで、すべてのユーザとして、すべてのコマンドを実行可能
書き方を間違えるとどのユーザでもsudo が使えなくなってしまう危険がある
直接テキストエディタで開いて編集はしない
■プロセスとジョブ
ps
現在のターミナルで実行しているプロセスだけ表示
ps xf
現在のユーザが実行しているすべてのプロセス
ps ax
システムで動作しているすべてのプロセス
ls -l / | cat -n | less
生成されるプロセスは3つだがジョブは1つ
ジョブはシェルごとの処理単位
Ctrl+zでジョブを停止
fg %<ジョブ番号>
ジョブをフォアグラウンドにする
bg %<ジョブ番号>
ジョブをバックグラウンドにする
Ctrl+zでジョブを停止させても動くようにする
コマンドラインの末尾に&をつけるとバックグランドジョブになる
cp file1 file2 &
フォアグラウンドのジョブはCtrl+cでジョブを終了
バックグラウンドのジョブは killで終了
kill %1
プロセスの終了もkill を使う
kill <プロセスiD>
ps auxで一覧を表示し
kill でプロセスを削除する
■標準入出力とパイプライン
標準入力 <
catを入力リダイレクトで表示
cat < /etc/crontab
catをファイル指定で表示(同じ動作)
cat /etc/crontab
標準出力 >
ls -l / > list.txt
ls -l の結果をlist.txtに出力する
標準エラー出力
ls /xxxxx
ls: /xxxxxにアクセスできません:そのようなファイルやディレクトリはありません
ls /xxxxx > list.txt
ls: /xxxxxにアクセスできません:そのようなファイルやディレクトリはありません
(標準出力をファイルにリダイレクトしてもエラーメッセージは表示される)
ls /xxxxx 2> list.txt
cat error.txt
ls: /xxxxxにアクセスできません:そのようなファイルやディレクトリはありません
(エラーメッセージをファイルに保存)
標準エラー出力のリダイレクトは2>を使う
ls /xxxxx > list.txt 2> error.txt
実行結果はlist.txtに
エラーメッセージはerror.txtに出力される
(二つのファイルにリダイレクトする)
標準出力と標準エラー出力をまとめる
ls /xxxxx > result.txt 2>&1
・数値の内容
標準入力 0
標準出力 1
標準エラー出力 2
echo 789 >> number.txt
追記リダイレクト(同一ファイル名でも上書き保存されない目的もある)
cat number.txt
456
789 ←追記された
cat < /dev/null
(標準入力を空っぽにする。何も表示されない)
/dev/nullはリダイレクト先としてよく使われる
パイプライン
lsの結果をlessコマンドに送り込む
ls -l | less
コマンド履歴をlessで読む
history | less
3つのコマンドをつなげる
ls -l /etc | cat -n | less
標準エラー出力もパイプラインに送る
ls -l / /xxxxx 2>&1 | less
フィルタ
head /etc/crontab
ファイルの先頭10行目までを表示する
cat そのまま表示する
head 先頭部分を表示する
tail 末尾部分を表示する
grep 指定した検索パターンに一致する行だけを表示する
sort 順番に並べかえる
uniq 重複行を取り除く
tac 逆順に出力する
wc 行数やバイト数を出力する
du -b /bin/* | sort -n | tac | head -n 5
ファイルサイズの大きい上位5つを表示
■テキスト処理
wc <テキストファイルディレクトり>
入力ファイルの行数、単語数、バイト数を数える
sort
テキストファイルの中の並び順をソートする
uniq <テキストファイル>
テキストファイルの中の重複行を省く
cut <テキストファイル>
ファイル内指定した部分を切り出す
tr <置換前の文字> <置換後の文字>
純粋にフィルタとして設計されている
文字を置き換える
例 cat /etc/passwd | tr : , :から,に変換する
文字を削除する
例 cat/etc/passwd | tr -d ‘\n’
tail <ファイル>
ファイルの末尾を表示する
tail /etc/passwd
ファイルの追記を監視する
tail -f <ファイル名>
diff
差分を表示する
diff [オプション] <比較元ファイル> <比較先ファイル>
■正規表現
grep
ディレクトリ・ファイルの文字列を正規表現で検索して表示する
正規表現での検索も可能
1文字にマッチ
grep ‘t.st’ example.txt
test,tfst,tzstなどの行を含む一行が検索される
エスケープ文字 .そのものにマッチさせる
grep ‘\.’ example.txt
特定の文字にマッチさせる
grep ‘t[ef]st’ example.txt
testまたはtfstにマッチする
’[^a]’ aを含まないいずれかの一文字
‘Be*r’ 繰り返しを指定 Br,Ber,Beerにマッチ
‘Be{2}r’ 繰り返しの数を指定Beerにマッチ
‘Ber’
■高度なテキスト処理
sed <テキストファイル>
指定ファイルの中身を置換したり、抽出したりする
awk <テキストファイル>
1つ以上のスペースで区切られた複数列のテキストデータを色々処理する
■シェルスクリプト
■シェルスクリプトの基礎知識
■シェルスクリプトを活用しよう
■アーカイブと圧縮
・tar アーカイブ(一つのファイルにまとめる、圧縮はしない)する。歴史が長い。
tarコマンドはファイルのパーミッション、オーナー、タイムスタンプなどのファイル属性もそのままアーカイブする。
バックアップに適している。
・アーカイブ
tar cf <圧縮ファイル.tar> <ディレクトリ>
cはcreate
・アーカイブ内容の確認
tar tf <圧縮ファイル.tar>
tはlistのt
・アーカイブファイルの展開
tar xf <圧縮ファイル.tar>
xはextract
・アーカイブ(一覧を表示しつつ) でも利用は賛否両論
tar cvf <圧縮元ファイル> <ディレクトリ>
・アーカイブ内容の確認(一覧を表示しつつ) これは良い
tar tvf <圧縮ファイル>
・アーカイブファイルの展開(一覧を表示しつつ) でも利用は賛否両論
tar tvf <圧縮ファイル>
・gzip
圧縮
・gzip <圧縮元ファイル>
gz形式で圧縮 高速に動作する
展開
・gunzip <ファイル.gz>
・tarとgzipを組み合わせて圧縮する
gzipを使わなくてもtarだけでtar+gzipファイルを作ることができる
zオプションを使う
tar czf <ファイル.tar.gaz> <ディレクトリ>
昔は組み合わせてやっていた
tar cf – dir1 | gzip -c > dir1.tar.gz
・bzip2形式
bzip2形式で圧縮 圧縮率が高いが時間がかかる
・圧縮
bzip <対象ファイル.bz2>
・bzip2の展開
bunzip2 <対象ファイル.bz2>
・tarとbzipを組み合わせて圧縮する
bzipを使わなくてもtarだけでtar+bzipファイルを作ることができる
jオプションを使う
tar cjf <ファイル.tar.bz2> <ディレクトリ>
・xz形式
xz形式で圧縮 圧縮率が高いが時間がかかる(さらに)
tar cJf <ファイル.tar.xz> <ディレクトリ>
・zip
dnf install zip unzip
パッケージのインストールが必要
zip形式でアーカイブと圧縮を同時に行う
Windows、Macとやりとりする際に有効
zipの圧縮
zip -r <圧縮ファイル名> <圧縮対象パス>
zip の展開
unzip <zip名>
zip -rq <zip名> <ディレクトリ名> 対象ファイル名表示せずにzipファイルを作成
unzip -q <zip名> 対象ファイル名を表示せずにzipファイルを展開
パスワード付きの圧縮
zip -er <圧縮ファイル名> <圧縮対象パス>
パスワード付きの展開
unzip <zip名>
パスワード入力のプロンプトで入力をする
■ソフトウェアとパッケージ
■RedHat系
dnf install <>
dnf remove <>
dnf search <>
dnf info <>
昔はyum install
yumはサポート終了となったpython2 系で、yum後継のdnfはpython3 系
■Debian系
sudo apt install <>
sudo apt remove <>
debian系 linuxでインストール
ssh <ログイン> @<宛先IPアドレス>
ssh接続
info <コマンド名>
コマンドのドキュメントinfoドキュメントが表示される