Fire Engine

消防士→ITエンジニア→研究者

インフラエンジニアになって覚えたLinuxコマンド その1

こんにちは、つるべーです。
会社のインフラ研修も終わり、4月の2週目から正式にインフラチームにJoinしました。
今回は私が初めてインフラ業務をやっていく中で覚えたLinuxコマンドを備忘録的に書いていきます。まだまだインフラ運用に必要なコマンドはあると思うので、定期的にまとめて書いていこうと思っています。
細かいオプションの使い方等は解説しませんが、どういうときに使えるコマンドであるかと、実行例を書いていきたいと思います。

環境

目次

df

ファイルシステムの使用状況を確認する

$ df -Th
Filesystem                      Type      Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 xfs        38G  929M   37G   3% /
devtmpfs                        devtmpfs  236M     0  236M   0% /dev
tmpfs                           tmpfs     245M     0  245M   0% /dev/shm
tmpfs                           tmpfs     245M  4.4M  240M   2% /run
tmpfs                           tmpfs     245M     0  245M   0% /sys/fs/cgroup
/dev/sda2                       xfs      1014M   63M  952M   7% /boot
tmpfs                           tmpfs      49M     0   49M   0% /run/user/1000

-Tファイルシステムの種別(Type)を表示
-h:読みやすいように単位をつけて表示

du

ファイルのディスク使用量を確認する

$ du -hs *
0   bin
30M boot
0   dev
31M etc
19M home
0   lib

(省略)

-h:読みやすいように単位をつけて表示
-s:引数で指定したファイル/ディレクトリの合計容量のみ表示
上の例ではカレントディレクトリの全てのファイルおよびディレクトリの合計容量を表示している。

free

メモリの使用量・空き容量を表示

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           488M         82M         78M        4.4M        328M        373M
Swap:          1.5G          0B        1.5G

-h:読みやすいように単位をつけて表示

ln

ファイルへのリンクを作成

<ハードリンク>
1つのファイルに複数の名前を持たせる
rmコマンドで削除すると指定したファイル名だけが取り除かれファイルの実体は残る。リンクされた最後のファイルが削除されたタイミングでディスク上から削除される。

$ ln file1 file-hl

シンボリックリンク
Windowsのショートカットと同様に、あるファイルを別のファイル名で参照させる。
シンボリックリンクを削除しても元のファイルは削除されない。

$ ln -s file file-sl

$ ls -la
total 0
drwxr-xr-x  2 root    root     33 Apr 29 13:55 .
drwx------. 6 vagrant vagrant 234 Apr 29 13:31 ..
-rw-r--r--  1 root    root      0 Apr 29 13:50 file
lrwxrwxrwx  1 root    root      4 Apr 29 13:55 file-sl -> file

-sシンボリックリンクを作成

lsof

プロセスが開いているファイルを表示する
<ファイル名指定>
ファイルを開いているプロセスを特定

$ lsof /usr/local/nginx/logs/access.log
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME
nginx   3202   root    3w   REG  253,0   416000 74101 /usr/local/nginx/logs/access.log
nginx   3629 nobody    3w   REG  253,0   416000 74101 /usr/local/nginx/logs/access.log

<ポート番号指定>
-iで指定したポートを開いているプロセスを特定

$ lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3202   root    7u  IPv4  24069      0t0  TCP *:http (LISTEN)
nginx   3629 nobody    7u  IPv4  24069      0t0  TCP *:http (LISTEN)

w

現在サーバにログインしているユーザを確認する

$ w
 12:15:40 up  8:48,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
vagrant  pts/0    10.0.2.2         03:37    4.00s  0.16s  0.00s sshd: vagrant [priv]

tar

アーカイブを作成/展開する
tarは複数のファイルやディレクトリをまとめるだけであり、通常gzipなどの圧縮処理と組み合わせて利用される

<作成>

$ tar czvf dir1.tar.gz dir1
dir1/
dir1/file1.txt
dir1/file2.txt
dir1/file3.txt
dir1/file4.txt

※ オプションにハイフン「-」をつけなくてよい
cアーカイブを作成(Create)
zgzip形式を利用
v:処理したファイル一覧を表示
f:ファイルを指定

<展開>

$ tar xzvf dir1.tar.gz dir1
dir1/
dir1/file1.txt
dir1/file2.txt
dir1/file3.txt
dir1/file4.txt

xアーカイブの展開(eXtract:抽出)

xargs

入力を引数としてコマンドを実行する

$ ls test*
test_1.txt  test_2.txt  test_3.txt

$ ls test* | xargs rm

空白もしくは改行で区切られて文字列を1つずつコマンドに引数として渡して実行する。

tee

標準入力を標準出力とファイルに書き出す

$ ls -la | tee ls.txt
total 116
drwxr-xr-x. 13 root root   169 Apr 29 12:31 .
dr-xr-xr-x. 18 root root   273 Apr 29 12:29 ..
dr-xr-xr-x.  2 root root 20480 Mar 11 08:43 bin
drwxr-xr-x.  2 root root     6 Nov  5  2016 etc
drwxr-xr-x.  2 root root     6 Nov  5  2016 games
drwxr-xr-x. 34 root root  8192 Mar  5 14:56 include
dr-xr-xr-x. 27 root root  4096 Mar  5 14:56 lib

上の標準出力に加えてファイルにも書き出されている

# cat ls.txt
total 116
drwxr-xr-x. 13 root root   169 Apr 29 12:31 .
dr-xr-xr-x. 18 root root   273 Apr 29 12:29 ..
dr-xr-xr-x.  2 root root 20480 Mar 11 08:43 bin
drwxr-xr-x.  2 root root     6 Nov  5  2016 etc
drwxr-xr-x.  2 root root     6 Nov  5  2016 games
drwxr-xr-x. 34 root root  8192 Mar  5 14:56 include
dr-xr-xr-x. 27 root root  4096 Mar  5 14:56 lib

find

ディレクトリツリーからファイルを検索する

$ find . -type f -name "*.txt"
./test.txt
./member.txt
./dev/dev.txt
./dev/test/file.txt

-type:ファイルの種類を指定(f:ファイル、d:ディレクトリ、l:シンボリックリンク
-name:ファイル名を指定(-inameとすると大文字小文字を区別しない)
上の例ではカレントディレクトリ配下の.txtファイルを検索して表示している。

参考

[改訂第3版]Linuxコマンドポケットリファレンス

[改訂第3版]Linuxコマンドポケットリファレンス