Linux du コマンド:ファイル容量の推定

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、ディスク使用量を推定・分析するための強力なツールである Linux の du (disk usage) コマンドについて学習します。あなたは、急速に肥大化するファイルサーバーの管理を任されたシステム管理者だと想像してください。あなたの任務は、ストレージ利用を最適化するために、容量を消費しているディレクトリやファイルを特定することです。du コマンドは、このディスク容量調査における信頼できる捜査ツールとなります。

du の基本を理解する

du コマンドは、ディスク使用量を把握するための第一歩です。まずはその基本的な機能を確認してみましょう。

最初に、調査を行うプロジェクトディレクトリに移動します。

cd ~/project

次に、基本的な du コマンドを実行してみます。

du

ヒント:ファイルやフォルダはランダムに作成され、そのサイズもランダムであるため、実行するたびに結果が異なる場合があります。

以下のような出力が表示されます。

0       ./documents/reports
0       ./documents
10240   ./backups
0       ./logs/archive
0       ./logs/system
5120    ./logs/application
5120    ./logs
15360   .

各行には 2 つの情報が表示されています。

  1. ディスク使用量(KB 単位)
  2. 対応するディレクトリパス

数字は一見すると分かりにくいかもしれません。これらはキロバイト(KB)単位のディスク使用量を表しています。しかし、心配はいりません。もっと読みやすく表示する方法があります。

-h(human-readable:人間が読みやすい形式)オプションを付けてコマンドを実行してみましょう。

du -h

すると、次のような出力が表示されます。

0       ./documents/reports
0       ./documents
10M     ./backups
0       ./logs/archive
0       ./logs/system
5.0M    ./logs/application
5.0M    ./logs
15M     .

-h オプションは、サイズを人間にとって分かりやすい形式(K はキロバイト、M はメガバイトなど)に変換します。これにより、一目で状況を把握するのが非常に簡単になります。

いくつか注意点があります。

  • 最後の . は現在のディレクトリ(この場合は ~/project)を表します。
  • ディレクトリのディスク使用量には、そのすべてのサブディレクトリの使用量が含まれます。
  • セットアップスクリプトがランダムなファイルサイズを生成するため、表示されるサイズは若干異なる場合があります。

特定のディレクトリを調査する

基本を理解したところで、特定のディレクトリを詳しく調べてみましょう。かなりの容量を消費していると思われる logs ディレクトリに注目します。

まず、logs ディレクトリに移動します。

cd ~/project/logs

次に、du を使ってこのディレクトリを調べます。

du -h

以下のような出力が表示されるはずです。

0       ./archive
0       ./system
5.0M    ./application
5.0M    .

これにより、logs ディレクトリ内の各サブディレクトリのディスク使用量の内訳がわかります。しかし、logs ディレクトリ全体の合計だけを知りたい場合はどうすればよいでしょうか。

--max-depth オプションを使用すると、du がディレクトリ構造をどこまで深く探索するかを制限できます。

du -h --max-depth=0

これにより、現在のディレクトリの合計のみが出力されます。

5.0M    .

--max-depth=0 は、サブディレクトリの中まで入らずに、現在のディレクトリのみを表示するよう du に指示します。

直下のサブディレクトリまで表示したい場合は、--max-depth=1 を使用します。

du -h --max-depth=1

出力例:

0       ./archive
0       ./system
5.0M    ./application
5.0M    .

これにより、どのサブディレクトリが最も容量を消費しているかがより明確になります。

--max-depth オプションは、ディレクトリ構造が深く階層化されている場合に、特定の階層レベルに集中して調査したいときに非常に便利です。

ディスク使用量のソートと分析

最も容量を消費しているサブディレクトリを特定できたので、次は結果をソート(並べ替え)する方法を学びましょう。これにより、ディスク容量を大量に消費している箇所を素早く特定できるようになります。

dusort コマンドを組み合わせて使用します。sort コマンドに詳しくなくても大丈夫です。使いながら説明します。

まず、du の出力をサイズ順にソートしてみましょう。

du -h | sort -h

このコマンドは 3 つの要素で構成されています。

  1. du -h: ディスク使用量を人間が読みやすい形式で出力します。
  2. |: これは「パイプ」と呼ばれます。左側のコマンドの出力を、右側のコマンドの入力として渡します。
  3. sort -h: 入力された内容を、人間が読みやすいサイズ単位(K, M, G など)を考慮して数値順にソートします。

以下のような出力が表示されます。

0       ./archive
0       ./system
5.0M    .
5.0M    ./application

出力は小さい順に並んでいます。しかし、多くの場合、大きなディレクトリを先に確認したいものです。順序を逆にするには、sort-r(reverse)オプションを追加します。

du -h | sort -hr

出力例:

5.0M    ./application
5.0M    .
0       ./system
0       ./archive

これで、logs フォルダ内のどのサブディレクトリが最も容量を消費しているかが、降順(大きい順)で明確に表示されました。

直下のサブディレクトリのみに絞ってソートするには、これまでに学んだテクニックを組み合わせます。

du -h --max-depth=1 | sort -hr

このコマンドは、現在のディレクトリの直下にあるサブディレクトリのみを表示し、ソートします。

コマンドラインの真の力は、このようにシンプルなコマンドを組み合わせて複雑な操作を実行できる点にあります。今、私たちは dusort、そして様々なオプションを組み合わせて、ディスク使用量を素早く分析しました。

最大サイズのファイルを特定する

これまではディレクトリのサイズを見てきました。しかし、具体的にどのファイルが最も容量を占有しているかを知りたい場合はどうすればよいでしょうか。du コマンドは主にディレクトリを対象としますが、他のコマンドと組み合わせることで大きなファイルを見つけることができます。

ここでは find コマンドと du を組み合わせて使用します。find に詳しくなくても、動作を説明するので安心してください。

まず、プロジェクトディレクトリに戻ります。

cd ~/project

次に、finddu を使って最大サイズのファイルを特定します。

find . -type f -exec du -h {} + | sort -hr | head -n 5

このコマンドは複雑に見えるかもしれませんが、分解してみましょう。

  1. find . -type f: 現在のディレクトリ(.)とそのサブディレクトリ内にあるすべてのファイル(-type f)を探します。
  2. -exec du -h {} +: 見つかった各ファイルに対して du -h を実行します。{} はファイル名に置き換えられ、+ は可能な限り多くのファイル名を一度に du に渡すよう指示します。
  3. sort -hr: 結果をサイズ順に降順(大きい順)でソートします。
  4. head -n 5: 上位 5 件の結果のみを表示します。

以下のような出力が表示されるはずです。

10M     ./backups/large_backup.bak
5.0M    ./logs/application/large_app_log.log
0       ./logs/system/placeholder.log
0       ./logs/archive/placeholder.log
0       ./logs/application/placeholder.log

この出力は、プロジェクトディレクトリ内の上位 5 つの大きなファイルとそのサイズを示しています。

特定のサイズより大きいファイルだけに絞り込みたい場合は、コマンドを修正できます。たとえば、1MB より大きいファイルを探してみましょう。

find . -type f -size +1M -exec du -h {} + | sort -hr

このコマンドでは、1 メガバイトより大きいファイルをフィルタリングするために -size +1M を追加しています。

これらのコマンドは、ディスク容量を解放しようとする際に非常に役立ちます。削除やアーカイブの候補となる大きなファイルを素早く特定できるからです。

ディスク使用量レポートの作成

ディスク容量調査の最後のステップとして、プロジェクトディレクトリ全体の包括的なディスク使用量レポートを作成しましょう。このレポートは、調査結果をまとめてチームに報告する際に役立ちます。

まず、プロジェクトディレクトリにいることを確認します。

cd ~/project

次に、du を使用して詳細なレポートを作成し、ファイルに保存します。

du -h --max-depth=2 | sort -hr > disk_usage_report.txt

このコマンドを分解します。

  1. du -h --max-depth=2: 2 階層目までのディスク使用量を人間が読みやすい形式で表示します。
  2. sort -hr: 結果をサイズ順に降順でソートします。
  3. > disk_usage_report.txt: 出力を disk_usage_report.txt という名前のファイルに保存します。> は「リダイレクト」演算子と呼ばれ、通常は画面に表示される出力をファイルに流し込みます。

レポートが作成されたので、その内容を確認してみましょう。

cat disk_usage_report.txt

ディレクトリとそのサイズが、大きい順に並んだ包括的なリストが表示されるはずです。

大きなディレクトリの概要だけを確認したい場合は、head コマンドを使用して冒頭部分だけを表示します。

head -n 10 disk_usage_report.txt

これにより、プロジェクト内の上位 10 個の大きなディレクトリが表示されます。

このレポートは、プロジェクトのどの部分が最もディスク容量を消費しているかを特定するための貴重な資料となります。ストレージ使用量の最適化や、リソース割り当てに関するチーム内での議論に役立ててください。

まとめ

この実験では、強力な du コマンドとそのディスク容量管理への応用について学びました。学習した内容は以下の通りです。

  1. 基本的な du コマンドによるディスク使用量の推定
  2. -h オプションによる人間が読みやすい形式での出力
  3. 特定のディレクトリの調査と --max-depth による階層の制限
  4. ディスク使用量結果のソートと分析
  5. ディレクトリ内の最大ファイルの特定
  6. 包括的なディスク使用量レポートの生成

これらのスキルは、ストレージリソースを管理するシステム管理者やパワーユーザーにとって不可欠なものです。

この実験では触れませんでしたが、他にも以下のような du オプションがあります。

  • -s: 引数ごとの合計のみを表示する
  • -c: 最後に総計を表示する
  • -a: ディレクトリだけでなくファイルについてもディスク使用量を表示する
  • --time: 各ディレクトリの最終更新日時を表示する
  • --exclude=PATTERN: PATTERN に一致するファイルやディレクトリを除外する