ディスクの空き容量が足りなくなったとき、「どこにそんなに使っているのか?」を調べるのは大切なスキルです。
Linuxでは df と du という2つのコマンドを組み合わせることで、ディスク使用状況を素早く把握できます。
df コマンド:ファイルシステム全体の空き容量を確認する
df(disk free)は、マウントされているファイルシステムの使用量と空き容量を表示します。
df
出力はバイト単位で読みにくいため、-h(human-readable)オプションをつけると見やすくなります。
df -h
出力例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 23G 25G 48% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/sdb1 100G 80G 18G 82% /data
各列の意味:
| 列名 | 説明 |
|---|---|
| Filesystem | デバイス名またはファイルシステム |
| Size | 合計サイズ |
| Used | 使用済み容量 |
| Avail | 利用可能な容量 |
| Use% | 使用率 |
| Mounted on | マウントポイント |
特定のディレクトリが属するファイルシステムだけを確認するには、パスを引数に渡します。
df -h /home
du コマンド:ディレクトリ・ファイルのサイズを調べる
du(disk usage)は、指定したディレクトリやファイルが実際に使っているディスク容量を表示します。
du /var/log
こちらも -h をつけると単位が読みやすくなります。
du -h /var/log
合計だけを表示する(-s オプション)
サブディレクトリを再帰的に全部表示するのではなく、指定したパスの合計だけ見たいときは -s を使います。
du -sh /var/log
出力例:
256M /var/log
直下のサブディレクトリごとのサイズを確認する
どのサブディレクトリが大きいかを調べるには、--max-depth=1(または -d 1)を使います。
du -h --max-depth=1 /var
出力例:
4.0K /var/backups
256M /var/log
12G /var/lib
1.2G /var/cache
大きいディレクトリを上位から探す
du の出力を sort にパイプして大きい順に並び替えると、容量を食っているディレクトリを素早く特定できます。
du -h --max-depth=1 /var | sort -rh
sort -r:逆順(大きいものを上に)sort -h:-hオプションで出力されたサイズ(K、M、Gつき)を正しく比較する
出力例:
12G /var/lib
1.2G /var/cache
256M /var/log
4.0K /var/backups
ホームディレクトリで大きいものを探す場合:
du -h --max-depth=1 ~ | sort -rh | head -10
head -10 で上位10件だけ表示します。
特定の拡張子のファイルを合計する
ログファイルだけの合計サイズを知りたいときは find と組み合わせます。
find /var/log -name "*.log" | xargs du -sh --total 2>/dev/null | tail -1
または、単純に特定ディレクトリ内の合計を確認:
du -sh /var/log/*.log 2>/dev/null
inode の使用状況を確認する
ディスクの空き容量がある(df -h では余裕あり)のにファイルが作れないことがあります。これは inode が枯渇している場合です。
df -i
出力例:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 250000 3026800 8% /
IUse% が 100% に近い場合は inode 不足です。大量の小さなファイルが原因のことが多いので、du で調べてから対処します。
練習問題
問題 1
ルートファイルシステム(/)のディスク使用率を人間が読みやすい形式で表示してください。
問題 2
/tmp ディレクトリの合計サイズを1行で表示してください。
問題 3
/usr ディレクトリ直下のサブディレクトリを、サイズの大きい順に上位5件表示してください。
解答
解答 1
df -h /
または、全ファイルシステムを表示して確認:
df -h
/ の行の Use% 列が使用率です。
解答 2
du -sh /tmp
-s で合計のみ、-h で人間が読みやすい単位(K/M/G)を指定しています。
解答 3
du -h --max-depth=1 /usr | sort -rh | head -5
--max-depth=1 で直下のサブディレクトリのみ対象にし、sort -rh で大きい順に並び替え、head -5 で上位5件に絞ります。