「ディスクの空きがありません」と警告が出て、どこから片付ければいいのか分からず固まったことがあります。
容量を空けるには、まず「全体でどれだけ空いているか」と「どこが容量を食っているか」を分けて見るのが近道です。
この記事では、その二つをそれぞれ担当する df と du の基本を、コピペで試せる形で整理します。
df と du は見ている場所が違う
df はファイルシステム全体の空き容量を、du はディレクトリ単位の使用量を表示するコマンドです。
ざっくり言うと、df は「残りどれだけ空いているか」を、du は「何がどれだけ使っているか」を調べます。
容量が足りないときは、まず df で全体像をつかみ、次に du で犯人を絞り込む——この順で動くと迷いません。
どちらも Linux や macOS に最初から入っているので、追加インストールは要らないのです。
df で空き容量を確認する
まずは df に -h を付けて、人間が読みやすい単位(GB や MB)で表示します。
df -h
Use%(使用率)と Avail(空き)の列を見れば、どのディスクが逼迫しているかが一目で分かります。
特定のパスがどのディスクに属するかを知りたいときは、そのパスをそのまま引数に渡すだけです。
df -h /var
容量は空いているのに書き込めないときは、-i で inode(ファイル数の上限)を疑います。
小さなファイルを大量に作ると、容量より先に inode を使い切ってしまうこともあるのです。
df -i /
du でディレクトリの使用量を調べる
du は、指定したディレクトリが使っている容量を計算します。
-s(合計だけ)と -h(読みやすい単位)を合わせた -sh が、最初に覚える形です。
du -sh /usr/lib
# 2.2G /usr/lib
配下のディレクトリごとの内訳を見たいときは、–max-depth で階層の深さを指定します。
du -h --max-depth=1 /usr
–max-depth=1 なら「直下のディレクトリまで」を表示し、それより深い中身は合算されるのです。
深さを指定しないと全階層を延々と出力するので、まずは 1 から始めるのが安全です。
容量を食っている犯人を探す
du の出力を sort に渡すと、サイズの大きい順に並べ替えられます。
コツは sort に -h を付けることで、2.2G と 862M のような単位付きの値も正しく大小比較してくれるのです。
du -h --max-depth=1 /var | sort -rh | head
これで「/var の直下で容量を食っている上位ディレクトリ」がすぐ見つかります。
ディレクトリではなく大きなファイルを名指しで探したいときは、-a を足しましょう。
du -ah /var/log | sort -rh | head
特定の種類を除いて集計したいときは、–exclude が使えます。
du -h --max-depth=1 --exclude='*.cache' ~
macOS で使うときの注意
GNU 版(多くの Linux)と BSD 版(macOS)では、一部のオプションの書き方が違います。
macOS の du には –max-depth が無く、代わりに -d で深さを指定する仕様です。
# macOS
du -d 1 -h /usr | sort -rh
古い macOS の sort は -h に対応しないことがあるので、その場合は Homebrew の coreutils を入れると、gsort や gdu として GNU 版と同じ書き方ができます。
最後に
容量が足りなくなったら、df で全体の空きを見て、du で犯人を絞る——この二段構えを覚えておくと落ち着いて対処できるのです。
とくに du の –max-depth と sort -rh を組み合わせる形は、そのまま定型として使い回せるはずです。
手が空いたときに一度、自分のホームディレクトリで試しておくと、いざというとき慌てずに済みます。
以上です。










コメントを残す