はじめに

こんにちは!今回はduコマンドについて解説します。

duはディレクトリやファイルの容量を調査するコマンドです。“disk usage"の略ですね。

dfがファイルシステム全体の容量を表示するのに対して、duはディレクトリ単位で詳細に容量を確認できます。「どのディレクトリが容量を圧迫しているのか?」を調べたい時に超便利なコマンドですよ。


duコマンドとは

duは、ファイルやディレクトリがディスク上でどれだけの容量を使用しているかを表示する外部コマンドです。

dfはファイルシステム全体を表示するのに対し、duはディレクトリツリーを辿りながら各ディレクトリの容量を表示します。容量が逼迫している時の原因特定に活躍するコマンドです。

主な用途:

  • 容量圧迫の原因調査
  • ディレクトリごとの容量確認
  • 容量の多いディレクトリを特定

基本構文

1
du [オプション] [ファイル/ディレクトリ]

指定なしで現在のディレクトリ配下を表示します。


主なオプション

オプション 説明
-h 人間が読みやすいサイズ表示(K、M、G)
-s ディレクトリの合計のみ表示
-a ファイルごとにも表示
-d 指定した深さまで表示
-c 最後に合計を表示
--max-depth ディレクトリの深さを制限
-S サブディレクトリを除いた容量を表示
-x 異なるファイルシステムをスキップ

使用例

例1: 現在のディレクトリ配下の容量を表示

1
du

実行結果:

1
2
3
4
12      ./subdir1
8       ./subdir2/sub2a
16      ./subdir2
36      .

各ディレクトリの容量を512バイトのブロック単位で表示します。ツリー状に表示されます。


例2: 人間が読みやすい形式で表示(推奨)

1
du -h

実行結果:

1
2
3
4
12K     ./subdir1
8K      ./subdir2/sub2a
16K     ./subdir2
36K     .

-hオプションで容量を自動的にK・M・Gで表示します。最も常用される形式です。


例3: 指定したディレクトリの合計のみ表示

1
du -sh /home/user

実行結果:

1
245M    /home/user

-sオプションで合計のみ表示します。ディレクトリ全体の容量を素早く確認できます。


例4: ファイルごとにも詳細表示

1
du -ha /home/user | head -20

実行結果:

1
2
3
4
10M     /home/user/largefile.iso
5M      /home/user/video.mp4
3M      /home/user/documents/report.pdf
...

-aオプションでファイル単位でも表示します。最大容量のファイルを特定できます。


例5: 深さを制限して表示

1
du -h --max-depth=2 /home

実行結果:

1
2
3
4
5
10M     /home/user/Downloads
15M     /home/user/Documents
50M     /home/user
100M    /home/admin
150M    /home

--max-depth=2で表示深度を制限します。階層が深すぎるツリーを見やすくできます。


例6: 最後に合計を表示

1
du -h -c /var/log

実行結果:

1
2
3
4
2.5M    /var/log/apache2
3.1M    /var/log/auth.log
...
50M     total

-cオプションで最後に合計を表示します。複数ディレクトリの比較に便利です。


例7: サブディレクトリを除いた容量

1
du -hS /home/user

実行結果:

1
2
3
150M    ./
8M      ./subdir1
12M     ./subdir2

-Sオプションで各ディレクトリ直下のみのサイズを表示します。重いファイルを見つけやすいです。


例8: 容量が大きいディレクトリをトップ10表示

1
du -sh /home/* | sort -hr | head -10

実行結果:

1
2
3
4
500M    /home/user1
350M    /home/user2
200M    /home/user3
...

各ユーザーディレクトリの容量をソートして表示します。容量圧迫の原因特定に活躍します。


例9: ファイルシステムをまたがらない設定

1
du -hx /

実行結果:

1
(/proc、/sys、/devなどマウントされたファイルシステムをスキップ)

-xオプションで異なるファイルシステムをスキップします。ローカルディスクのみを集計できます。


例10: 特定の拡張子のみの容量を集計

1
find /home -name "*.log" | xargs du -ch | tail -1

実行結果:

1
120M    total

.logファイルの合計容量を表示します。特定ファイル型の容量確認に便利です。


Tips・注意点

dfとduの違い

1
2
3
4
5
6
7
# df:ファイルシステム全体の容量
df -h /
20G total

# du:ディレクトリ配下の容量(dfより小さいことがある)
du -sh /
18G total  # 削除されたファイルが開かれているなど

duがdfより小さい場合は、削除済みファイルが開かれているか、キャッシュなどが原因です。


大量ファイルの処理は時間がかかる

1
2
3
4
5
# 時間がかかる可能性があり
du -h /

# タイムアウト設定をして実行
timeout 30 du -h /

ファイルが非常に多いディレクトリでは処理に時間がかかります。必要に応じてタイムアウトを設定しましょう。


ハードリンクの重複カウント

1
2
3
4
5
# ハードリンクされたファイルは複数回カウントされる
du /path/with/hardlinks

# 重複カウントを避けるには
du --count-links /path/with/hardlinks

ハードリンクされたファイルは複数回容量を計上されることがあります。


実践的な使い方

ディスク容量が足りない時の原因調査

1
2
3
4
5
6
7
df -h
# 容量が逼迫している!

du -sh /home/* | sort -hr
du -sh /var/* | sort -hr
du -sh /opt/* | sort -hr
# 各ディレクトリを調査して原因を特定

容量ピンチの時の標準的な調査手順です。


ユーザーごとの容量管理

1
du -sh /home/* | sort -hr | head -10

各ユーザーの使用容量をランキング表示します。ディスク使用ポリシーの策定に役立ちます。


古いログを削除する容量を計算

1
find /var/log -type f -mtime +30 | xargs du -ch | tail -1

30日以上前のログファイルの合計容量を計算します。削除による解放容量を事前に確認できます。


定期的な容量レポート

1
2
3
4
echo "=== Top 20 Directories ===" > /tmp/disk_report.txt
du -sh /* | sort -hr | head -20 >> /tmp/disk_report.txt
echo "=== /home Usage ===" >> /tmp/disk_report.txt
du -sh /home/* | sort -hr >> /tmp/disk_report.txt

容量レポートを作成して監視します。


まとめ

duコマンドのポイント:

  • 基本形式du -h(ツリー表示)
  • 合計のみdu -sh(推奨)
  • 詳細表示du -ha(ファイル単位)
  • 深さ制限du -h --max-depth=2
  • 容量でソートdu -sh /* | sort -hr
  • 容量圧迫時の調査:まずはdu -sh、その次に du -ha で特定
  • よく使う組み合わせ:du -sh, du -ha, du -sh /* | sort -hr

ディスク容量圧迫時の問題解決に欠かせないコマンドです。du -shsortを組み合わせることで、容量を圧迫しているディレクトリを素早く特定できますよ!