サーバーや開発環境を長く運用していると、知らぬ間にディスクが満杯に近づき、アプリケーションやデータベースが突然停止……なんてトラブルに遭遇したことはありませんか?
そんなときに手軽に使えるのが、Linuxで標準的に用意されているコマンドです。
- df:ファイルシステム(パーティション)単位での空き容量・使用量を確認
- du:ディレクトリやファイル単位での使用量を確認
これらを使いこなせば、どのディレクトリがどれだけ容量を食っているか、ファイルシステム全体でどれくらい空きがあるかを瞬時に把握できます。
本記事では両者の違いをしっかり押さえ、「いつ」「どちら」を使うべきかを解説します。
目次
dfコマンドの基本

1. コマンド概要
df(disk freeの略)は、マウント中のすべてのファイルシステムについて、次のような情報を表示します。
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 20480000 1024000 19456000 5% /
tmpfs 1024000 0 1024000 0% /dev/shm
- Filesystem:パーティション名やデバイス名
- 1K-blocks:全体容量(1KB単位)
- Used:使用済み容量
- Available:空き容量
- Use%:使用率(%)
- Mounted on:マウントポイント
2. 主なオプション
- h:人間に読みやすい単位(KB, MB, GB)で表示
- T:ファイルシステムの種類(ext4, xfs, tmpfsなど)を表示
- t <type>/-x <type>:表示する・除外するファイルシステム種類を指定
- -total:最後に合計を表示
例:ユーザー向けの見やすい表示
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 20G 1.0G 19G 5% /
tmpfs tmpfs 100M 0 100M 0% /dev/shm
Sizeが分かりやすくGB表記になるので、大まかな空き状況のチェックに最適です。
duコマンドの基本
1. コマンド概要
du(disk usageの略)は、指定したディレクトリ以下のファイル・ディレクトリごとのサイズを合計して表示します。
たとえば、ホームディレクトリの容量を調べるときは:
$ du -sh /home/username
1.2G /home/username
- s: 合計値のみ表示(summary)
- h: 人間に読みやすい単位
- 引数にディレクトリやファイルを指定しなければ、カレントディレクトリ以下を走査
2. 主なオプション
- a:ファイル単位でも表示
- -max-depth=<N>:深さNまでのサブディレクトリを表示
- -exclude=<パターン>:指定パターンを無視
- c:最後に合計を表示
例:サブディレクトリごとの容量を一覧
$ du -h --max-depth=1 /var/log
4.0K /var/log/anaconda
1.1M /var/log/httpd
8.5M /var/log/mysql
12M /var/log
/var/logの直下にある各フォルダ容量がわかり、どこにログが溜まっているかが一目瞭然です。
dfとduの違い
観点 | df | du |
---|---|---|
対象範囲 | ファイルシステム(パーティション)全体 | 指定ディレクトリ以下のファイル・ディレクトリ |
単位 | ブロック単位(-hで人間向け) | バイト単位(-hで人間向け) |
表示内容 | 使用量・空き量・使用率 | 各ファイル/ディレクトリの使用量 |
調査用途 | システム全体の空き容量チェック | どのファイル/フォルダが容量を食っているか確認 |
マウント・バインド | マウントされていない領域は対象外 | マウントポイント以下は全て計測 |
- df は「このディスクにあとどれだけ空きがあるか?」
- du は「何がどれだけ容量を食っているか?」
両者は見かけ上の数値が乖離することもあります。たとえば、大きなファイルを削除しても、プロセスが開きっぱなしだと空きが戻らず df は変化しない一方、du は削除後のディレクトリ内サイズを反映します。
使い分け・活用シーン

システム監視やアラート設定
df -h
を定期実行し、使用率が80%を超えたら通知- cron+メールや、Zabbix/Prometheusなどに組み込む
容量食い潰し原因の突き止め
du -h --max-depth=2 /
で大きなフォルダを絞り込みsort -hr
と組み合わせ
du -h /home | sort -hr | head -n 20
上位20件の大きいディレクトリを抽出
一時ファイルやログのメンテ
- 古いログだけ抜き出して削除:
find /var/log -type f -mtime +30 -exec du -h {} \;
find /var/log -type f -mtime +30 -delete
バックアップ容量の見積
du -sh /data/project
でバックアップ先サイズを算出
実践的な使い方の例
マウント別の使用率をグラフィカルに表示
df -hT | column -t
特定の種類(tmpfsなど)を除外
df -h -x tmpfs -x devtmpfs
大きなファイルのみ抽出
find . -type f -size +100M -exec ls -lh {} \;
定期実行スクリプト例
#!/bin/bash
THRESHOLD=90
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
mail -s "Disk Alert" admin@example.com <<< "Root partition usage is ${USAGE}%"
fi
注意点
削除と開放のタイミング
- プロセスが開いたままのファイル削除は
du
には反映されてもdf
には反映されない。再起動やプロセスの再起動が必要。
ハードリンク/シンボリックリンク
du
はハードリンクを重複計上せず、シンボリックリンクはデフォルトでリンク先を計測しない。オプションによる挙動変更に注意。
NFSやリモートマウント
df
はNFS上の使用率も表示するが、信頼性はサーバ依存。du
はローカルキャッシュを含めて計測される場合がある。
Reserved Blocks
- ext系ではルートユーザー以外に数%(通常5%程度)の予約領域があるため、
df
の空き容量に差分が生じる。
まとめ
- df:ファイルシステム全体の空き容量把握に最適
- du:個別ディレクトリ/ファイルの詳細な使用量解析に最適
- 両コマンドを組み合わせることで、「どのファイルシステムで」「どのディレクトリが」ディスクを圧迫しているかを迅速に特定可能
日々の運用やトラブルシューティング、バックアップ容量見積もりなど、さまざまなシーンで活躍するツールです。ぜひこの記事を参考に、Linuxサーバーのディスク容量管理を快適に行ってくださいね!