Linuxコマンドチートシート(プロセス・メモリ・ディスク編)

## はじめに

この記事は Linux 環境でのプロセス、メモリ、ディスクの状況確認のために使う自分のためのコマンドのチートシートです。
適宜更新していきます。

## プロセス

### プロセスの一覧取得

OS上で動いているすべてのプロセスをCPUやメモリの使用率も表示して確認するのは以下のコマンド。

```bash
$ ps aux
```

ここから特定のキーワードでプロセスを検索したいときは grep を用いるとよい。

```bash
$ ps aux | grep node
```

仮想メモリ使用量でソートするは以下の感じ。

```bash
$ ps aux | sort -rnk 5
```

子プロセスを考慮してプロセスをツリー表示する場合は以下を使う。

```bash
$ pstree -p
```

### プロセスの正常終了

```bash
$ sleep 600 &
[1] 9087
$ ps
  PID TTY          TIME CMD
 6991 pts/0    00:00:00 bash
 9087 pts/0    00:00:00 sleep
 9088 pts/0    00:00:00 ps
$ kill 9087
$ ps
  PID TTY          TIME CMD
 6991 pts/0    00:00:00 bash
 9142 pts/0    00:00:00 ps
```

### 指定のプロセスが開いているファイルを調べる

```bash
$ sudo lsof -p ${pid}
COMMAND  PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
dockerd 1104 root  cwd       DIR              259,5     4096    5376151 /var/snap/docker/384
dockerd 1104 root  rtd       DIR                7,1      321      12827 /
dockerd 1104 root  txt       REG                7,6 79888528         14 /snap/docker/384/bin/dockerd
dockerd 1104 root  mem-W     REG              259,5    32768     656392 /var/snap/docker/common/var-lib-docker/buildkit/cache.db
dockerd 1104 root  mem-W     REG              259,5    16384     656370 /var/snap/docker/common/var-lib-docker/buildkit/metadata.db
dockerd 1104 root  mem-W     REG              259,5    16384     656367 /var/snap/docker/common/var-lib-docker/buildkit/snapshots.db
```

### 指定のファイルを開いているプロセスIDを調べる

```bash
$ lsof ${filepath}
```

### 指定のプロセスが開いているファイルを調べる

```bash
$ lsof -p ${pid}
```

### 各プロセスの通信に使用しているポートなどを確認する

```bash
$ lsof -i
```

## メモリ

メモリ使用量をMB単位で表示する。

```bash
$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15935        2259       11752         158        1923       13168
Swap:          2047           0        2047
```

`Mem`は物理メモリ、`Swap`はディスク上のスワップ領域となります。

`shared` は主に tmpfs ファイルシステムで使われている領域のサイズを表す。
Ubuntu だと /dev/shm などにマウントされている。

ファイルの読み込み時にメモリにキャッシュするのだが、`buff/cache` は現在メモリでキャッシュしている領域のサイズを指す。

`Mem` の `used` はプロセスなどが使っている物理メモリ使用量。buff/cache は含まない。
`Mem` の `free` も buff/cache を含まない空いている物理メモリ領域を指す。
`Mem` の `available` は開放可能である `buff/cache` も含めた利用可能な物理メモリ領域を指す。

## ディスク

### 指定のファイルのメタデータを確認する

```bash
$ stat examples.desktop 
  File: examples.desktop
  Size: 8980      	Blocks: 24         IO Block: 4096   通常ファイル
Device: 10305h/66309d	Inode: 3934242     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    teru)   Gid: ( 1000/    teru)
Access: 2019-10-01 22:07:22.533667350 +0900
Modify: 2019-09-28 19:50:24.095516675 +0900
Change: 2019-09-28 19:50:24.095516675 +0900
 Birth: -
```

### ディレクトリ内の各ファイルの inode 番号を調べる

```bash
$ ls -i
```

### 各ファイルシステムの容量確認

```bash
$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             8135284        0   8135284   0% /dev
tmpfs            1631836     2132   1629704   1% /run
/dev/nvme0n1p5  86053984 14722548  66917024  19% /
tmpfs            8159168   109296   8049872   2% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            8159168        0   8159168   0% /sys/fs/cgroup
```

### 各ファイルシステムのinodeの利用率

```bash
$ df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev           2033821    646 2033175    1% /dev
tmpfs          2039792   1200 2038592    1% /run
/dev/nvme0n1p5 5505024 376935 5128089    7% /
tmpfs          2039792    226 2039566    1% /dev/shm
tmpfs          2039792      5 2039787    1% /run/lock
tmpfs          2039792     18 2039774    1% /sys/fs/cgroup
```

## その他

### 指定の秒ごとにコマンドを実行して結果を表示し続ける

10秒ごとに更新してプロセス一覧を表示し続ける。

```bash
$ watch -n 10 ps aux
```

## 参考資料

* [インフラエンジニアの教科書2](https://www.amazon.co.jp/dp/4863541864)
* [psコマンドについて詳しくまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-ps)