こういう場面で真っ先に使うのが du コマンドです。
この記事では、du コマンド(disk usage)の実践的な使い方を、現場で本当に使うオプションに絞って解説します。
単に一覧を出すだけでなく、--max-depth で階層を絞る、sort と組み合わせて「容量の大きい順」に並べる、df との使い分け、容量が合わない時の原因切り分けまで、20年以上Linuxサーバーを運用してきた実務目線でまとめました。
この記事のポイント
・du -sh * で現在ディレクトリ直下の使用量を一覧表示できる
・du -h --max-depth=1 /var で階層を1段に絞って見やすくする
・du -ah / | sort -rh | head -20 で容量の大きい順トップ20を特定
・df との差が出る時はオープン中削除ファイルをlsofで探す
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
duコマンドとは?dfとの違いを押さえておく
du は disk usage の略で、指定したディレクトリやファイルが「実際にどれだけディスク容量を使っているか」を集計するコマンドです。似たコマンドに df がありますが、役割がまったく違います。この違いを理解していないと、「df と du の結果が合わない」というトラブルで必ず詰まります。
・df:ファイルシステム全体の空き容量・使用率を調べる(パーティション単位)
・du:特定のディレクトリ配下が何バイト使っているかを調べる(ディレクトリ単位)
df が「パーティション全体の残量メーター」なら、du は「犯人のディレクトリ探し」に使うコマンドだと覚えてください。
本記事の動作確認は RHEL 9.4 / Ubuntu 24.04 LTS(GNU coreutils 9.x系)で実施しています。BSD版の du(macOS標準)とは一部オプションの挙動が異なる点に注意してください。
基本的な使い方(最頻出の3パターン)
duコマンドを実務で使う場面は、だいたい3パターンに集約されます。この3つさえ押さえれば、現場で困ることはほぼありません。1. カレントディレクトリ配下のサイズを人間が読みやすい形式で表示
まずは一番シンプルな使い方です。-s(summary:合計のみ)と -h(human-readable:K/M/G単位)を組み合わせます。# カレントディレクトリの合計サイズを表示 $ du -sh . 4.2G . # カレントディレクトリ直下の各エントリを個別に表示 $ du -sh * 512M data 2.1G logs 1.6G backup 8.0K README.md
・du -sh *:直下のディレクトリ/ファイルごとに1行で表示(一番よく使う)
・du -sh .:カレント全体の合計を1行だけ表示
・du -h .:配下の全サブディレクトリを再帰的に表示(出力が膨大になる)
2. --max-depth で階層を絞って表示する
大きなディレクトリツリーを調べる時、再帰表示だと出力が数千行になって埋もれます。そこで便利なのが --max-depth オプションです。# /var の直下(1階層)だけを表示 $ du -h --max-depth=1 /var 16M /var/cache 1.2G /var/log 512M /var/lib 8.0K /var/tmp 1.8G /var # 2階層まで表示(/var/log の中も見たい時) $ du -h --max-depth=2 /var/log 32M /var/log/httpd 512M /var/log/journal 680M /var/log/messages.gz 1.2G /var/log
なお、古いBSD版の du には --max-depth がなく、代わりに -d を使います。GNU版でも -d は使えるので、互換性を重視する場合は -d 1 の方が無難です。
3. sortと組み合わせて容量の大きい順に並べる
「どこが一番容量を食っているか」を一発で特定したい時は、du の出力を sort に渡します。これは現場で一番使う組み合わせです。# /home 配下でサイズの大きい順にトップ10 $ du -ah /home | sort -rh | head -10 8.2G /home 6.1G /home/tomohiro 3.4G /home/tomohiro/backup 2.8G /home/tomohiro/backup/db_2026-04-01.sql.gz 1.2G /home/tomohiro/Downloads 980M /home/tomohiro/Downloads/rhel-9.4-x86_64-dvd.iso 512M /home/tomohiro/.cache 320M /home/tomohiro/Documents 280M /home/shared 180M /home/tomohiro/.mozilla # ディレクトリのみに絞ってトップ10(-a を外す) $ du -h /home | sort -rh | head -10
・-r:reverse(降順)
・-h:human-numeric-sort。K/M/G の単位を認識して数値的に比較する
`sort -n` だと 9.8G が 10M より大きいと判定される(頭の数字しか見ない)バグが起きるので、du -h の出力には必ず -h を付けてソートしてください。
応用・実務Tips
基本の3パターン以外にも、現場で「これを知っていると早い」というTipsを紹介します。特定の拡張子だけ合計サイズを調べる
ログファイルやバックアップファイルなど、「.gz だけで何GB使っているか」を調べたい時は find と組み合わせます。# /var/log 配下の .gz ファイルの合計サイズ $ find /var/log -name "*.gz" -type f -print0 | du -ch --files0-from=- | tail -1 1.8G 合計 # または xargs で渡す方法(ファイル数が多い時は --files0-from=- が安全) $ find /var/log -name "*.gz" -type f | xargs du -ch | tail -1
しきい値以上のディレクトリだけ表示する
--threshold(または -t)で「この容量以上のものだけ表示」というフィルタが可能です。ノイズを減らして一瞬で犯人を絞り込めます。# 1GB以上のディレクトリだけ表示 $ du -h --max-depth=3 --threshold=1G /var 1.2G /var/log/journal 1.8G /var # 逆に「100MB未満」のものだけ見たい場合はマイナス指定 $ du -h --max-depth=2 --threshold=-100M /var
ディスク上の実使用量とファイルの見かけサイズを区別する
du はデフォルトで「ディスク上で実際に占有しているブロックサイズ」を返します。ファイルシステムのブロック単位(通常4KB)で切り上げられるため、1バイトのファイルでも 4.0K と表示されます。見かけの論理サイズ(ls -l で見えるサイズ)を知りたい時は --apparent-size を使います。
# ディスク占有サイズ(デフォルト) $ du -sh /home/tomohiro/tiny-files/ 400K /home/tomohiro/tiny-files/ # 論理サイズ(ファイル内容のバイト数合計) $ du -sh --apparent-size /home/tomohiro/tiny-files/ 28K /home/tomohiro/tiny-files/
df と du の結果が合わない時の対処
現場で一番ハマりやすいトラブルです。df は「90%使用」と言うのに、du -sh / で足し上げると60%しかない——こういう時は「削除されたがオープン中のファイル」を疑ってください。# 削除済みだがプロセスが開いているファイルを特定 $ sudo lsof +L1 | head -20 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME httpd 12345 root 5w REG 253,0 1234567890 0 1048576 /var/log/httpd/error.log.1 (deleted) mysqld 9876 mysql 12w REG 253,0 987654321 0 2097152 /var/lib/mysql/ibtmp1 (deleted)
この挙動はLinuxの「オープン中ファイルはクローズまで inode 保持」という仕様に起因するため、du と df の差は避けられません。トラブル時の定番切り分け手順として覚えておいてください。ポート番号・プロセス特定については Linux ポート確認の全コマンド も併せて参照してください。
du コマンドの主要オプション一覧
実務で使うオプションを一覧でまとめておきます。迷ったらここを見返してください。| オプション | 意味・用途 |
|---|---|
| -s | summary。合計のみ表示(再帰表示しない) |
| -h | human-readable。K/M/G単位で表示 |
| -a | all。ディレクトリだけでなくファイルも表示 |
| -c | 最後に総合計を1行追加する |
| --max-depth=N / -d N | 指定した階層までしか表示しない |
| --threshold=SIZE / -t SIZE | SIZE以上(マイナスならSIZE未満)のみ表示 |
| --apparent-size | ディスク占有ではなく論理サイズで集計 |
| -x | 別ファイルシステムをまたがない(バインドマウント対策) |
| --exclude=PATTERN | パターンに一致するファイル/ディレクトリを除外 |
| --time | 最終更新時刻も併せて表示 |
「Permission denied」や「No such file」が出た時の対処法
du を一般ユーザーで実行すると、権限のないディレクトリで大量のエラーが出ます。典型的なのが次のような出力です。$ du -sh /var du: '/var/cache/ldconfig' を読み込み権限がありません: 許可がありません du: '/var/lib/mysql' を読み込み権限がありません: 許可がありません du: '/var/log/audit' を読み込み権限がありません: 許可がありません 1.2G /var
・sudo を付ける:`sudo du -sh /var` が一番確実。正確な集計が必要な時はこちら
・エラーだけ捨てる:`du -sh /var 2>/dev/null` で標準エラー出力を捨てる。ただし集計は不完全になる点に注意
ログ調査目的なら sudo、ざっくり「自分が読める範囲での容量感」を知りたいだけなら 2>/dev/null という使い分けをしてください。
また「No such file or directory」が大量に出る時は、du が走っている間にファイルがローテーション・削除された可能性が高いです。稼働中のサーバーで /var/log を集計すると起きやすい現象で、通常は無視して構いません。
du でディレクトリサイズを継続監視する仕組み化
一度調べて終わりではなく、定期的に記録しておくと「いつから増え始めたか」が後から分かります。cron と組み合わせた簡単な監視スクリプトを置いておきます。#!/bin/bash # /usr/local/bin/log-disk-usage.sh # 毎日0時に /var と /home の使用量を記録する LOGFILE="/var/log/disk-usage-history.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') { echo "===== ${DATE} =====" sudo du -sh /var /home /opt 2>/dev/null echo "" } >> "${LOGFILE}" # crontab -e で以下を追加 # 0 0 * * * /usr/local/bin/log-disk-usage.sh
本記事のまとめ
du コマンドは、ディスク容量トラブルの切り分けに最初に使うツールです。df で「全体がやばい」ことを掴み、du で「どこが犯人か」を絞り込む——この二段構えを覚えておけば、ディスク逼迫の初動で迷いません。覚えておくべきパターンは次の3つです。
・du -sh *:直下のディレクトリ一覧を一気に俯瞰する
・du -h --max-depth=1 /var:階層を絞ってボトルネック階層を見つける
・du -ah / | sort -rh | head -20:サーバー全体でトップ20の巨大ファイル・ディレクトリを特定
オプションを無理に暗記せず、この3パターンを手に馴染ませるのが実務では一番早いです。df と du の結果が合わない時は、lsof +L1 で削除済みオープンファイルを疑う——この流れも合わせて身につけておいてください。
ディスク容量の切り分けに続いて、ファイルシステムやマウントまわりの知識も合わせて押さえておくと、障害対応のスピードが一段上がります。Linux 基本コマンドの解説もセットで確認しておくと、日常運用の引き出しが広がります。
「ディスク逼迫のたびに深夜対応で消耗していませんか?」
duコマンドは強力な調査ツールですが、本当に現場を楽にするのは「逼迫する前に気づく設計」と「障害時に迷わず動ける型」がセットで身についたときです。ディスク・ログ・プロセス・ネットワーク、どの切り口からでも自分の手で原因に辿り着けるかが現場の分かれ目になります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます