【2026年7月最新】Linuxコマンド「du」完全ガイド|ディスク使用量確認・全オプション・sort/find組み合わせまで徹底解説
この記事の内容
「ディスクが満杯で突然サービスが止まった」「ログファイルがいつの間にか数十GBになっていた」——Linuxサーバーを運用していれば、こんな経験が一度はあるはずです。そのトラブルを未然に防ぐための基本コマンドが duコマンド(Disk Usage)です。
duコマンドは、ディレクトリやファイルが実際にどれだけのディスク容量を使っているかを調べるLinuxの標準コマンドです。「どのフォルダが容量を食っているか」を素早く特定できるため、サーバー管理・AIプロジェクトのデータ管理・定期的なストレージ監視まで、あらゆる場面で使われます。
この記事では、duコマンドの基本構文から全オプション・sortやfindとの組み合わせ・Mac(BSD版)とLinux(GNU版)の違い・「Permission denied」エラーへの対処法まで、一つの記事で完全に理解できるよう解説します。さらに後半では、AIツールのClaude Codeを使って「duを実行せずにディスク管理を自動化する」方法もご紹介します。
この記事を読み終わると、次のことが自分でできるようになります。
01 WHAT IS DU duコマンドとは何か――dfとの違いと使いどころ Disk Usage コマンドの基本概念と、混同しやすいdfコマンドとの違いを整理する
まず「duコマンドが何をするコマンドなのか」を明確にしておきましょう。duは Disk Usage(ディスク使用量) の略で、指定したディレクトリやファイルが現在どれだけのディスクスペースを使用しているかを表示するコマンドです。1970年代のUNIXから存在する歴史の長いコマンドで、現代のLinux・Mac・BSD系のOSに標準搭載されています。
📚 用語解説
duコマンド:Disk Usageの略。指定したディレクトリやファイルのディスク使用量を再帰的に表示するLinux/Unixの標準コマンド。「そのフォルダが合計で何バイト使っているか」を調べるのに使います。
1-1. dfコマンドとの違い――「パーティション全体」vs「フォルダ単位」
duと混同されやすいコマンドに dfコマンド(Disk Free)があります。この2つはどちらもディスクに関するコマンドですが、調べる対象がまったく異なります。df は「ディスクパーティション全体でどれだけ空きがあるか」を表示するのに対し、du は「特定のディレクトリが何バイト消費しているか」を調べます。
| コマンド | 略称の意味 | 調べる対象 | 主な用途 |
|---|---|---|---|
| du | Disk Usage | 指定ディレクトリ・ファイルの使用量 | どのフォルダが容量を食っているか特定 |
| df | Disk Free | マウントされたパーティション全体 | ディスク全体の空き容量確認 |
典型的な使い分けとして、まず df -h でディスク全体の残り容量を確認し、「残り10%しかない」と分かったら次に du で「どのディレクトリが大量に使っているか」を掘り下げる——というワークフローが定番です。dfで全体像を掴み、duで犯人を特定するイメージです。
1-2. duコマンドが必要になる典型シナリオ
日々の運用でduコマンドが必要になる場面は多岐にわたります。特によくあるのは以下のような状況です。ディスクが満杯に近づいてアラートが出た、特定のサービスが突然遅くなった、バックアップが失敗した——こういったトラブルの多くはディスク容量の問題が根本原因です。
ディスクが100%になるとOSはファイルの書き込みができなくなり、サービスが停止します。アプリケーションログも書けなくなるため、「なぜ止まったのか」の原因調査すらできなくなるケースも。月1回程度のduチェックを習慣にするだけで、こうした最悪の事態を未然に防げます。
1-3. duコマンドの実際の動作原理
duコマンドは指定したディレクトリを再帰的(recursively)にたどり、各ファイルのディスク使用量を合算して表示します。「再帰的」とは、指定ディレクトリの中のサブディレクトリ、さらにその中のサブディレクトリ…と、階層を何段でも自動的に辿ることを意味します。ファイル自体のサイズ(apparent size)ではなく、実際にディスクブロックとして占有しているサイズが計算されます。
📚 用語解説
ディスクブロック:ディスクがデータを読み書きする最小単位。一般的なLinuxシステムでは4KB(4,096バイト)が1ブロックです。100バイトのファイルでも最低1ブロック(4KB)を占有するため、「ファイルサイズの合計」と「実際のディスク使用量」はしばしば異なります。
02 BASIC USAGE duコマンドの基本構文と出力の読み方 引数なし実行から、出力に表示される数字の単位まで丁寧に解説
duコマンドの基本構文はシンプルです。引数(調べたいパス)を指定するか、省略するとカレントディレクトリが対象になります。まず実際に叩いてみて、出力を読めるようになることが出発点です。
2-1. 基本構文
du [オプション] [ファイル/ディレクトリ...]
最もシンプルな使い方は引数なしで実行することです。カレントディレクトリ(現在いるディレクトリ)以下の全サブディレクトリの使用量が表示されます。
# カレントディレクトリの使用量を表示 $ du # 特定ディレクトリを指定する場合 $ du /var/log # 複数のディレクトリを同時に指定 $ du /var/log /home /tmp
2-2. デフォルト出力の単位を理解する
オプションなしで実行したとき、出力される数字の単位は512バイトブロック(または1KBブロック)です。環境によって異なりますが、多くのLinuxでは1KBブロックが使われます。この生の数字は直感的でないため、実際の作業では後述の -h(human-readable)オプションをほぼ必ず付けます。
# オプションなし(1KBブロック単位で出力される) $ du /var/log 4 /var/log/apt/term.log 12 /var/log/apt 8 /var/log/auth.log ... 2048 /var/log # -h オプション付き(人間が読みやすいサイズに変換) $ du -h /var/log 4.0K /var/log/apt/term.log 12K /var/log/apt 8.0K /var/log/auth.log ... 2.0M /var/log
生の数字(1024、4096 などのブロック数)より「2.0M」「1.5G」の方が圧倒的に読みやすいです。後述するすべての実用例でも -h オプションを組み合わせています。迷ったらまず du -h で始めましょう。
2-3. 出力の構造を読む
duの出力は「サイズ(タブ区切り)パス名」という構造です。各行がそのディレクトリ以下の合計使用量を表しています。サブディレクトリが先に表示され、最後に親ディレクトリの合計(子ディレクトリを含む)が表示されます。
$ du -h /var/log 4.0K /var/log/apt/term.log ← /var/log/apt/term.log 単体のサイズ(-a付きの場合) 12K /var/log/apt ← /var/log/apt ディレクトリ以下の合計 8.0K /var/log/auth.log 2.0M /var/log ← /var/log 以下すべての合計(最後に表示)
📚 用語解説
再帰処理:コンピュータが処理を繰り返す手法の一つ。duの場合、「指定ディレクトリの中のディレクトリを調べ、そのまた中のディレクトリを調べ…」と、ネストが何段あっても自動で掘り下げます。終わりのない入れ子構造を一括で処理できる強力な仕組みです。
03 ALL OPTIONS duコマンドの全オプション一覧と使い方 頻出オプションから高度な使い方まで、実例付きで完全網羅
duコマンドには多数のオプションがあります。すべてを暗記する必要はありませんが、よく使う10個程度を押さえておくと、あらゆる状況に対応できます。まず全体を表で把握してから、重要なものを実例付きで解説します。
| オプション | 説明 | 主な用途 |
|---|---|---|
| -h, --human-readable | K・M・G などの単位で表示 | 常に付けるのがおすすめ |
| -s, --summarize | 指定パスの合計のみ表示(サブディレクトリ非表示) | 特定ディレクトリの総サイズを一発確認 |
| -a, --all | ディレクトリだけでなくファイルも個別に表示 | どのファイルが大きいか特定したい時 |
| -S, --separate-dirs | サブディレクトリのサイズを合計に含めない | 各階層のサイズを独立して把握したい時 |
| -c, --total | 最後に全体の合計を追加表示 | 複数パスの合計サイズを知りたい時 |
| -b, --bytes | バイト単位で表示(apparent-size) | 正確なバイト数が必要な時 |
| -k | 1KBブロック単位で表示 | スクリプトで数値処理する時 |
| -m | 1MBブロック単位で表示 | 大容量ファイルの粗い確認 |
| --max-depth=N (-d N) | 指定した階層までしか表示しない | 深い階層を除いて概要を見たい時 |
| --exclude=PATTERN | 特定のパターンに一致するファイル・ディレクトリを除外 | キャッシュや仮想環境を除いてサイズを見たい時 |
| -x, --one-file-system | 異なるファイルシステムに跨らない | マウントポイントを無視して計測したい時 |
| -L, --dereference | シンボリックリンク先のファイルのサイズを計測 | シンリンクを実体として計測したい時 |
| --apparent-size | 実際のディスクブロックではなく見た目のサイズを表示 | スパースファイルの実サイズ確認 |
| -0, --null | 出力を改行でなくNULLで区切る | スペース入りファイル名を安全に処理 |
3-1. -h(human-readable):必ず付けるべき基本オプション
-h オプションは「人間が読みやすい形式(human-readable)」でサイズを表示します。バイト数ではなく、4.0K・2.3M・1.7G のような単位付き表示に変換されます。実際の業務では、このオプションなしでduを使う場面はほぼないと言っても過言ではありません。
# -h なし(読みにくい) $ du /home/user/projects 2048 /home/user/projects/website 51200 /home/user/projects/dataset 102400 /home/user/projects # -h あり(直感的に分かる) $ du -h /home/user/projects 2.0M /home/user/projects/website 50M /home/user/projects/dataset 100M /home/user/projects
3-2. -s(summarize):合計だけ表示する
-s オプションは、指定したパスの合計サイズだけを1行で表示します。サブディレクトリが何百個あっても、最終的な合計1行だけが出てきます。「このフォルダ全体で何GBか?」を素早く確認したい時に使います。複数パスを指定して -c オプションも一緒に使うと、それぞれの合計+全体の合計が確認できます。
# /home ディレクトリ全体の合計サイズだけ確認 $ du -sh /home 25G /home # 複数パスの合計と全体合計を表示(-c と組み合わせ) $ du -sh /var/log /home /tmp -c 2.3G /var/log 25G /home 500M /tmp 27.8G total ← -c で全体合計が追加される
3-3. --max-depth=N:指定階層まで表示する(最も実用的)
--max-depth=N は、指定した階層数までのディレクトリのみ表示します。Nに1を指定すると、指定パスの直下のディレクトリのみが表示され、深い階層は非表示になります。実際のサーバー管理では最も頻繁に使うオプションの一つです。
# /var の直下ディレクトリのサイズを確認(1階層) $ du -h --max-depth=1 /var 2.3G /var/log 4.5G /var/lib 200M /var/cache 50M /var/tmp 7.1G /var # 2階層まで展開して確認 $ du -h --max-depth=2 /var 2.1G /var/log/nginx 180M /var/log/mysql 2.3G /var/log 3.8G /var/lib/docker 700M /var/lib/mysql 4.5G /var/lib ...
大容量のディレクトリを絞り込む際は、まず --max-depth=1 でトップレベルを確認し、容量が大きいディレクトリに絞って --max-depth=2 で次の階層を確認する、というトップダウン方式が効率的です。
3-4. -a(all):ファイルも個別に表示する
-a オプションを付けると、ディレクトリだけでなく個々のファイルのサイズも表示されます。デフォルトではディレクトリの合計のみ表示されますが、-a を付けるとファイル1つ1つが列挙されます。後述するsortコマンドと組み合わせることで「このディレクトリで最も大きいファイルはどれか」を特定できます。
# ディレクトリのみ表示(デフォルト) $ du -h /var/log 4.0K /var/log/apt 2.3G /var/log # ファイルも表示(-a オプション) $ du -ha /var/log 4.0K /var/log/apt/term.log 8.0K /var/log/auth.log 1.8G /var/log/nginx/access.log ← 大きいファイルが見える 500M /var/log/mysql/mysql.log 2.3G /var/log
3-5. --exclude=PATTERN:特定ファイルを除外する
--exclude=PATTERN を使うと、指定したパターンに一致するファイルやディレクトリをカウントから除外できます。例えばDockerコンテナイメージやPythonの仮想環境(venv)など、「本来のプロジェクトとは別の大容量ファイル」を除いて計測したい場合に便利です。ワイルドカード(*)が使えます。
# .gitディレクトリを除外してプロジェクトサイズを計測 $ du -sh --exclude=".git" /home/user/myproject # node_modules と .cache を除外 $ du -sh --exclude="node_modules" --exclude=".cache" /home/user/app # 複数の拡張子を除外(ログファイルなど) $ du -sh --exclude="*.log" --exclude="*.tmp" /var
04 DU + SORT sortコマンドと組み合わせる――容量大きい順に並べる 「どのフォルダが一番デカいか」を瞬時に特定する実践的な使い方
duコマンド単体では出力がディレクトリ構造に沿った順番になるため、「どこが一番容量を使っているか」がすぐには分かりません。ここで sortコマンドとパイプ(|)で組み合わせることで、「容量の大きい順に並べる」ことができます。実際のサーバー調査でほぼ毎回使うパターンです。
📚 用語解説
パイプ(|):Linuxのコマンドをつなぐ仕組み。左のコマンドの出力を右のコマンドの入力として渡します。du | sort なら「duの結果をsortに渡して並べ替える」という意味。複数のコマンドをチェーンしてより複雑な処理を実現できます。
4-1. 基本的な組み合わせパターン
du -h の出力を sort -rh に渡すと、人間が読みやすい単位(K・M・G)を考慮した上で、大きい順(-r: reverse, -h: human-readable sort)に並べ替えてくれます。この -rh の組み合わせが重要で、-rh なしだと数字の大小ではなく文字列として並べられ、「10M が 2M より小さい」という誤った並び順になることがあります。
# カレントディレクトリの容量を大きい順に表示 $ du -h | sort -rh # /var 以下を1階層で大きい順に表示(最も使う組み合わせ) $ du -h --max-depth=1 /var | sort -rh 4.5G /var/lib 2.3G /var/log 200M /var/cache 50M /var/tmp 7.1G /var # 上位10件だけ表示(head と組み合わせ) $ du -h --max-depth=1 / | sort -rh | head -10
4-2. ホームディレクトリの使用量TOP10を調べる
ユーザーのホームディレクトリ(/home/username/)が肥大化している場合、どのサブディレクトリが原因かを特定するのに以下のコマンドが便利です。特にAI・機械学習のプロジェクトでデータセットが膨れ上がるケースが多く、弊社でも月1回程度このコマンドで定期チェックしています。
# ホームディレクトリのサブディレクトリをサイズ順に表示 $ du -sh ~/* | sort -rh | head -10 25G /home/user/datasets 8.5G /home/user/models 3.2G /home/user/videos 1.5G /home/user/backups 800M /home/user/logs ... # 隠しディレクトリ(.で始まる)も含める場合 $ du -sh ~/.* ~/* 2>/dev/null | sort -rh | head -15
4-3. ファイルも含めて大きいもの順に並べる
ディレクトリではなく、個々のファイルの中で最も大きいものを探したい場合は -a オプションを組み合わせます。ただし -a は全ファイルを列挙するため大量の行が出てくることに注意し、head や grep と組み合わせて絞り込むことを推奨します。
# /var/log 以下のファイルを大きい順に表示(上位20件)
$ du -ah /var/log | sort -rh | head -20
1.8G /var/log/nginx/access.log
500M /var/log/mysql/mysql.log
200M /var/log/syslog
...
# 100MB以上のファイルのみ表示
$ du -ah /var | sort -rh | awk '$1 ~ /G|[0-9]{3}M/ {print}'
# 特定の拡張子だけ対象にする
$ find /var/log -name "*.log" -exec du -sh {} \; | sort -rh | head -10
05 DU + FIND findコマンドと組み合わせる――条件付き検索 ファイルサイズ・更新日時・拡張子などの条件で絞り込む高度な使い方
duコマンドは「ディレクトリ全体の合計」を調べるのが得意ですが、「特定の条件(例: 1GB以上のファイル、30日以上アクセスされていないファイル)を満たすもの」を探したい場合は findコマンドと組み合わせるのが効果的です。findで条件に一致するファイルを絞り込み、その結果をduに渡してサイズを表示するパターンです。
📚 用語解説
findコマンド:Linuxのファイル検索コマンド。サイズ・更新日時・拡張子・所有者など、様々な条件でファイルを絞り込める。du と組み合わせると「条件を満たすファイルの合計サイズ」を計算できます。
5-1. 大きいファイルを探す(1GB以上)
ディスクを圧迫している大きなファイルを直接特定したい場合、findの -size オプションでサイズによる絞り込みが可能です。サーバーに気づかないうちに巨大なダンプファイルやメモリダンプが作成されることがあり、このコマンドで素早く発見できます。
# ホームディレクトリで1GB以上のファイルを探す
$ find /home -type f -size +1G 2>/dev/null | xargs du -sh | sort -rh
# /var 以下で100MB以上のファイルを探す
$ find /var -type f -size +100M 2>/dev/null -exec du -sh {} \; | sort -rh
# プロジェクトディレクトリで500MB以上のファイルを探す
$ find /srv/projects -type f -size +500M -exec du -sh {} \; | sort -rh
5-2. 古いファイルを探す(30日以上アクセスなし)
長期間アクセスされていないファイルは削除の候補になります。findの -atime オプションでアクセス時刻による絞り込みができます。ただし削除前には内容を確認し、本当に不要かを判断することが重要です。
# 30日以上アクセスされていないログファイルを探す
$ find /var/log -name "*.log" -atime +30 -exec du -sh {} \; | sort -rh
# 90日以上更新されていない .bak ファイルを探す(更新時刻)
$ find /home -name "*.bak" -mtime +90 2>/dev/null -exec du -sh {} \; | sort -rh
# 結果をファイルに保存しておく(後で確認・削除判断)
$ find /var -mtime +60 -type f 2>/dev/null > /tmp/old_files.txt
$ wc -l /tmp/old_files.txt # 件数確認
$ du -sh /var/log/*.log 2>/dev/null # ログ合計サイズを手動確認
findで見つけたファイルを即座にrm -fで削除するのは危険です。必ずリストをファイルに保存してから内容を確認し、本当に不要かを判断した上で削除してください。特にシステムファイルや設定ファイルを誤って削除すると、サービスが起動しなくなる場合があります。
5-3. 特定の拡張子ファイルの合計サイズを計算する
「プロジェクト内のすべての .csv ファイルは合計何GBか」「ログファイル全部でどのくらい容量を取っているか」を調べたい場面があります。findで拡張子を絞り込み、xargs du で合計サイズを計算するパターンが便利です。
# すべての .csv ファイルの合計サイズ $ find /home/user/data -name "*.csv" | xargs du -sh 2>/dev/null # ログファイルの合計サイズ(再帰的に) $ find /var/log -name "*.log" -print0 | xargs -0 du -sc | tail -1 # Dockerイメージの合計サイズを確認 $ find /var/lib/docker -type f | xargs du -sh 2>/dev/null | tail -1 # Pythonキャッシュファイルの合計 $ find /home -name "__pycache__" -type d | xargs du -sh | sort -rh
06 MAC VS LINUX Mac(BSD版du)とLinux(GNU版du)の違い 同じコマンドなのに挙動が違う?macOSで使う際の注意点を整理
「Linuxで使えたコマンドが Macで動かない」——これはBSD系のコマンドを採用しているmacOSとGNU系のLinuxとの仕様の違いによって起こる、よくある問題です。duコマンドも例外ではなく、一部のオプションでLinuxとmacOSで挙動が異なります。両方の環境を使う方は以下を把握しておいてください。
| 機能 | GNU du (Linux) | BSD du (macOS) | 対処法 |
|---|---|---|---|
| 階層の深さ制限 | --max-depth=N | -d N | macOSでは -d を使う |
| -h オプション | ほぼ同じ挙動 | ほぼ同じ挙動 | 互換あり |
| -b オプション | バイト単位表示 | 非対応(エラーになる) | macOSでは --apparent-size 相当なし |
| --apparent-size | 見かけのサイズ表示 | 非対応 | macOSでは代替なし |
| --exclude=PATTERN | 対応 | 対応(同じ記法) | 互換あり |
| -x (one-file-system) | 対応 | 対応 | 互換あり |
| ブロックサイズのデフォルト | 1KB | 512バイト | -k オプションで合わせる |
6-1. --max-depth と -d の違い
最も頻繁にハマるのが、階層の深さを指定するオプションです。LinuxのGNU duでは --max-depth=1 と書きますが、macOSのBSD duでは -d 1 と書きます。これを知らないと、Macで du --max-depth=1 を実行したときに「illegal option」エラーが出て混乱します。
# Linux(GNU du)での書き方 $ du -h --max-depth=1 /var # macOS(BSD du)での書き方 $ du -hd 1 /var # または $ du -h -d 1 /var # 両方で動くようにエイリアスを設定する方法(~/.bashrc や ~/.zshrc に追加) # Linuxなら問題なし、macOSでもGNU coreutilsをHomebrewで入れれば解決 alias du="gdu" # macOSでhomebrew install coreutils 後に有効
Homebrewで「brew install coreutils」を実行すると、GNU版のduが「gdu」というコマンドで使えるようになります。~/.zshrc に「alias du=gdu」を追加しておくと、LinuxとmacOSで同じコマンドが使えて便利です。開発やサーバー管理で両方の環境を使う方に推奨します。
6-2. デフォルトブロックサイズの違い
もう一つの違いはデフォルトのブロックサイズです。LinuxのGNU duはデフォルトで1KBブロックで表示しますが、macOSのBSD duは512バイトブロックがデフォルトです。そのため、オプションなしでdoを実行したとき、同じディレクトリでもmacOSの数字がLinuxの約2倍になります。どちらも -k オプション(1KB単位)や -h オプション(人間が読める形式)を付ければ統一されるので、実用上は -h を常に付けることで解決できます。
シェルスクリプトでduの出力を数値として処理する場合、Linuxで動いていたスクリプトがmacOSでは2倍の数字が出て誤動作することがあります。スクリプトの中でduを使う際は、必ず -k(1KBブロック統一)または --block-size=1(バイト統一)を明示的に指定して、環境依存を排除することをおすすめします。
07 TROUBLESHOOTING 「Permission denied」エラーの対処法 duでよく遭遇するエラーの原因と、正しい解決方法
duコマンドを実行したとき、最もよく遭遇するエラーが 「du: cannot read directory 'XXXX': Permission denied」 というメッセージです。これは、参照しようとしたディレクトリに対して読み取り権限がないために発生します。特にシステムディレクトリ(/etc, /root, /proc など)や、他のユーザーのホームディレクトリを調べようとした場合に出てきます。
7-1. sudoを使って解決する
最もシンプルな解決方法は、コマンドの先頭に sudo を付けて管理者権限で実行することです。sudoを使うと、そのコマンドの実行権限がroot(スーパーユーザー)に昇格し、通常アクセスできないディレクトリも参照できます。ただし、sudoを使える(sudoersに登録されている)ユーザーである必要があります。
# sudo なし(一部のディレクトリでアクセス制限エラーが出る) $ du -sh /var/log du: cannot read directory '/var/log/secure': Permission denied du: cannot read directory '/var/log/audit': Permission denied 1.8G /var/log # sudo 付き(すべてのディレクトリを参照できる) $ sudo du -sh /var/log 2.3G /var/log # システムディレクトリを調べる場合(管理者権限で実行) $ sudo du -h --max-depth=1 /var | sort -rh | head -20
7-2. エラーを無視して出力する(2>/dev/null)
「Permission deniedのエラーメッセージは見たくないが、アクセスできるディレクトリのサイズは知りたい」という場合は、エラー出力(stderr)を /dev/null にリダイレクトしてエラーを捨てるテクニックが使えます。2>/dev/null を末尾に付けることで、エラーメッセージだけを消しつつ、正常な出力は画面に表示されます。
# エラーメッセージを非表示にする $ du -sh /var/log 2>/dev/null 2.3G /var/log # エラーを無視しながらも大きいディレクトリを探す $ du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20 # findとの組み合わせでもエラーを抑制 $ find /var /home -type f -size +1G 2>/dev/null | xargs du -sh 2>/dev/null
📚 用語解説
stderr(標準エラー出力):Linuxコマンドには「標準出力(stdout)」と「標準エラー出力(stderr)」の2つの出力先があります。通常のメッセージはstdoutに、エラーメッセージはstderrに出ます。「2>/dev/null」はstderr(ファイルディスクリプタ番号2)を/dev/null(データを捨てる仮想ファイル)に向けるリダイレクト命令です。
7-3. その他のよくあるエラーと対処法
| エラーメッセージ | 原因 | 対処法 |
|---|---|---|
| du: cannot read directory: Permission denied | 読み取り権限がない | sudo を付ける、または 2>/dev/null でエラーを抑制 |
| du: command not found | duコマンドがインストールされていない | apt install coreutils(Debian/Ubuntu)または yum install coreutils(CentOS) |
| du: illegal option -- - | macOSでLinux用オプションを使った | -d N に変更、またはGNU coreutilsをインストール |
| xargs: argument list too long | findの結果が多すぎてxargsに渡せない | xargs -0 と find -print0 を組み合わせる |
| 出力が止まらない | 膨大な数のファイルを処理中 | Ctrl+C で中断し --max-depth で絞り込む |
08 PRACTICAL SCENARIOS 業務での実践シナリオ――サーバー管理・AIプロジェクト よくある現場の問題と、duコマンドを使った解決フローを実例で解説
ここからは、実際の業務で遭遇する典型的なシナリオと、duコマンドを使った解決フローを紹介します。「コマンドを知っている」だけでなく、「問題が起きたときに迷わず使える」状態を目指してください。
8-1. シナリオ1: Webサーバーのディスクアラート対応
「ディスク使用率が90%を超えた」というアラートが届いた場合の調査フローです。弊社でも実際にあったケースで、原因はNginxのアクセスログが1.8GBまで肥大化していたことでした。以下の手順でわずか5分以内に原因を特定できます。
df -h で
どのパーティションが
逼迫しているか確認
sudo du -h --max-depth=1 / で
トップレベルの
大きいディレクトリを特定
大きいディレクトリ内を
--max-depth=2 で
さらに掘り下げる
du -ah | sort -rh で
大きいファイルを
特定して削除検討
# Step 1: ディスク全体を確認 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 45G 5G 90% / ← ここが逼迫 # Step 2: / 直下を確認 $ sudo du -h --max-depth=1 / 2>/dev/null | sort -rh | head -10 40G /var 3.5G /home 1.2G /usr ... # Step 3: /var を掘り下げ $ sudo du -h --max-depth=2 /var 2>/dev/null | sort -rh | head -10 38G /var/log 1.5G /var/lib ... 38G /var/log/nginx ↑ Nginx ログが犯人! # Step 4: ログファイルを個別確認 $ sudo du -ah /var/log/nginx | sort -rh | head -5 36G /var/log/nginx/access.log 1.5G /var/log/nginx/error.log
8-2. シナリオ2: AIプロジェクトのデータセット管理
機械学習や生成AIのプロジェクトでは、学習用データセット・モデルのチェックポイントファイル・実験結果のログが膨大な容量を占めることがあります。定期的にduでサイズを把握し、不要なファイルを整理する習慣が重要です。
# AI プロジェクトのディレクトリ構成ごとのサイズを確認
$ du -h --max-depth=2 /home/user/ai_project | sort -rh | head -20
80G /home/user/ai_project/datasets/train
45G /home/user/ai_project/models/checkpoints
12G /home/user/ai_project/datasets/validation
8G /home/user/ai_project/logs/experiments
# モデルチェックポイントファイルだけ確認
$ find /home/user/ai_project -name "*.pth" -o -name "*.pkl" -o -name "*.h5" | xargs du -sh | sort -rh
# 30日以上前のチェックポイントを特定(削除候補)
$ find /home/user/ai_project/models -mtime +30 \( -name "*.pth" -o -name "*.pkl" \) -exec du -sh {} \; | sort -rh
最終モデルだけを残してチェックポイントを削除すると劇的に容量が削減できます。実験結果のログも「最新50回分だけ保持」などのルールを設けると管理が楽になります。またtarball(tar.gz)で圧縮してから保存する習慣をつけると、テキスト系のデータセットで50〜70%の容量削減が見込めます。
8-3. シナリオ3: 月次ディスク使用量レポートの生成
定期的にディスク使用量をレポートとして記録しておくと、「先月から急に増えた」という変化を即座に察知できます。以下のシェルスクリプトを月1回cronで実行するだけで、自動的にレポートを保存できます。
#!/bin/bash
# disk_report.sh - 月次ディスク使用量レポート生成
DATE=$(date +%Y%m%d)
REPORT_FILE="/var/reports/disk_${DATE}.txt"
echo "=== ディスク使用量レポート: $(date) ===" > "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "--- ディスク全体 ---" >> "$REPORT_FILE"
df -h >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "--- ディレクトリ別使用量(上位20) ---" >> "$REPORT_FILE"
sudo du -h --max-depth=2 / 2>/dev/null | sort -rh | head -20 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "--- 1GB以上のファイル ---" >> "$REPORT_FILE"
sudo find /var /home -type f -size +1G 2>/dev/null | xargs du -sh 2>/dev/null | sort -rh >> "$REPORT_FILE"
echo "レポートを ${REPORT_FILE} に保存しました"
# cronに登録する場合(毎月1日の午前2時に実行)
# 0 2 1 * * /home/user/disk_report.sh
09 CLAUDE CODE AUTOMATION Claude Codeに任せるとduコマンドが不要になる 「ディスクが増えてきた」と話しかけるだけで、調査から整理提案まで全自動
ここまでduコマンドの詳細を解説してきましたが、実を言うと弊社(株式会社GENAI)では、毎回手動でduを叩いてはいません。Claude Code(Anthropicのターミナル上で動くAIエージェント)に「ディスクの調査をして」と話しかけるだけで、duコマンドの実行から結果の解析・整理提案まで自動でやってくれるからです。
📚 用語解説
Claude Code:Anthropicが提供するターミナル(コマンドライン)上で動くAIエージェント。チャット形式の指示でファイル操作・コマンド実行・スクリプト生成まで自律的に行える業務ツール。Claude ProプランまたはMaxプランに追加料金なしで含まれます。
9-1. Claude Codeへの話しかけ方の例
Claude Codeを使ったディスク管理は、Linuxコマンドの知識がなくても自然な日本語で指示できます。以下のような指示をターミナルで入力するだけで、調査から提案まで一気通貫でやってくれます。
# Claude Code への指示例(ターミナルで "claude" を起動してから話しかける) 「/var/log のディスク使用量を調べて、大きいファイルを特定してください」 「ホームディレクトリの中でどのフォルダが一番容量を使っているか調べて、 削除できそうなものがあれば候補を教えてください」 「30日以上アクセスされていない1GB以上のファイルをリストアップして、 削除した場合の容量削減量を計算してください」 「AIプロジェクトの /home/user/ai_project を分析して、 不要なチェックポイントファイルを削除する手順を作ってください」
Claude Codeは上記の指示を受け取ると、適切なduコマンドやfindコマンドを自動で選択・実行し、結果を解析して「このファイルを削除すると何GB空く」「優先度の高い削除候補はこれ」という形で報告してくれます。コマンドの文法を覚える必要がなく、意図を日本語で伝えるだけで済みます。
日本語で指示
「/var/log を調べて」
コマンドを選択
du, find, sort を組み合わせ
結果を自動集計
削除候補・サイズ削減量をレポート
9-2. 弊社GENAIでのClaude Code活用事例
弊社では、Claude Max 20xプラン(月額$200、約30,000円)を契約して、サーバー管理・広告運用・記事制作・経理など全社の業務にClaude Codeを活用しています。ディスク管理についても、月次で「ストレージの整理をして」とClaudeに依頼するだけで、調査から古いバックアップの削除提案まで完結しています。
| 作業 | Claude Codeなし(手動) | Claude Codeあり | 削減時間 |
|---|---|---|---|
| ディスク逼迫の原因特定 | df/du/find を手動で組み合わせ(15〜30分) | 「ディスクを調べて」と話しかけるだけ(3分) | 約80%削減 |
| 月次ストレージレポート作成 | スクリプト作成+実行(60分) | 「月次レポートを作って」と指示(5分) | 約90%削減 |
| 不要ファイルの整理提案 | 手動でファイルリストを確認(30分〜) | Claude Codeが自動分析・提案(5分) | 約85%削減 |
| クリーンアップスクリプト作成 | シェルスクリプトを自分で書く(45分) | 「スクリプトを生成して」と指示(5分) | 約90%削減 |
「duコマンドを完全マスターしてからClaude Codeを使う」ではなく、duの基本を理解しつつ、繰り返す作業はClaude Codeに任せるというハイブリッドが最も効率的な運用方法です。コマンドの知識はClaude Codeが提案した内容を「正しいか・安全か」を判断するための素養として活きます。
Linux管理・AIツール活用でのClaude Code導入をサポートします
duコマンドのような日々の運用作業をClaude Codeで自動化したい方、またはAIツールを使った業務効率化を本格的に進めたい経営者・管理職の方に、弊社AI鬼管理の導入支援サービスをご紹介します。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. duコマンドとdfコマンドはどう使い分ければいいですか?
A. dfはディスクパーティション全体の空き容量を確認するコマンド、duは特定のディレクトリやファイルの使用量を詳しく調べるコマンドです。ディスクが逼迫した際はまずdf -hで「どのパーティションが問題か」を特定し、次にdu --max-depth=1で「どのフォルダが容量を使っているか」を掘り下げるという使い分けが基本です。
Q. du -h の -h は何の略ですか?
A. -h は「human-readable(人間が読みやすい)」の略です。このオプションを付けると、バイト数の生の数字ではなく「4.0K」「2.3M」「1.5G」のような単位付きの表示になります。実際の業務では常に -h を付けることをおすすめします。
Q. Macでdu --max-depthが使えないのはなぜですか?
A. macOSのduはBSD版(Unix系)で、Linuxで使われるGNU版とは一部オプションが異なります。macOSでは --max-depth=N の代わりに -d N を使います。「du -h -d 1 /var」のように記述してください。LinuxのGNU版と完全に互換にしたい場合は、Homebrewで「brew install coreutils」を実行してGNU版(gdu)を別途インストールする方法もあります。
Q. Permission deniedエラーが出てもサイズを確認することはできますか?
A. はい、2つの方法があります。1つ目はコマンドの先頭にsudoを付けて管理者権限で実行する方法(sudo du -sh /path)、2つ目はエラーを無視するリダイレクト(du -sh /path 2>/dev/null)を末尾に付けてエラーメッセージだけ消す方法です。アクセスできるディレクトリのサイズは表示されます。
Q. duコマンドの実行が遅い・止まった場合はどうすればいいですか?
A. duが遅い主な原因は、調べるファイル数が膨大であることです。解決策として、1) --max-depth=1 で階層を浅くして絞り込む、2) Ctrl+C で中断して調査範囲を狭めて再実行する、3) 夜間など負荷の低い時間帯にniceコマンド(nice -n 19 du -sh /path)でCPU優先度を下げて実行する、といった方法があります。
Q. du -h と du -sh はどう違いますか?
A. -h は「human-readable形式で表示する」オプションで、サブディレクトリも含めてすべての行が人間が読みやすいサイズで表示されます。-s は「summarize(合計のみ表示)」オプションで、指定したパスの合計だけを1行で表示します。-sh と組み合わせると、「人間が読みやすい形式で合計のみ表示」になります。「このフォルダは全部で何GB?」を素早く確認したいときは du -sh が便利です。
Q. Claude Codeを使うとduコマンドを知らなくてもサーバー管理できますか?
A. ある程度は可能です。Claude Codeに「/var/log のディスク使用量を調べて大きいファイルを教えて」と自然言語で指示すると、適切なduコマンドを自動実行して結果をまとめてくれます。ただし、Claude Codeが提案した削除候補が本当に不要かを判断するためにも、duコマンドの基礎を理解しておくことで、より安全で適切な判断ができます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




