運用を始めたシステムは、時期の早い遅いはあれど、いずれはディスクが一杯になる。ファイルシステムごとにディスクの使用量や空き容量を把握できるコマンドとして、第85回ではdfコマンドを取り上げた。今回は、ディスクの使用量をファイルやディレクトリ単位で表示してくれるコマンド「du」を紹介しよう。

duコマンドは、次のような感じで利用する。

duコマンドの実行例(CentOSの場合)

duコマンドの実行例(macOSの場合)

ご覧のように、ディレクトリごとにディスクの使用量が表示される。

duコマンドは、より正確に言うとファイルのサイズの合計値ではなく、ファイルシステムのブロック使用量の合計値を表示する。また、シンボリックリンクやハードリンクのファイルの扱いをどうするのかや、ファイルシステムをまたいでいる場合のカウントをどうするのかといったこともオプションで制御できるのだが、そこまで厳密に考える必要はないだろう。大雑把にディスクの使用量が把握できれば、十分だと思う。

duコマンドで知っておいたほうがよいオプションは「-s」と「-h」だ。-hオプションを指定しないと単位が表示されないので、わかりにくい表示になる。「スクリプトで数値を取り出して加工して利用する」といった特殊な場合を除き、-hオプションは指定することになるだろう。

引数を何も指定しないでduコマンドを実行したところ。サイズがバイトで出力され、サイズが把握しづらい

一方、-sオプションは出力をまとめるためのオプションだ。duコマンドはディレクトリが指定された場合、次のように再帰的にそのディレクトリ以下の全てのファイルとディレクトリに関してディスクの使用量を出力する。

-sオプションを指定しないと再帰的に全部表示しようとする

-hオプションも指定してないので、サイズがわかりにくい

これでは正直、使いにくい。そこで-sオプションを指定すると、対象となったディレクトリにディスクの使用量をまとめた上で表示してくれるのだ。つまり、「du -sh *」のように指定してコマンドを実行すると、コマンドを実行したディレクトリ以下のディスクの使用量が、そのディレクトリに存在するファイルおよびディレクトリにサマライズした状態で表示される。多くの場合、この使い方で事足りる。

ここまで使い方がわかったら、後は機械的に作業していけばよい。まず、「/」に移動して「du -sh *」とコマンドを実行し、ディスク容量を消費しまくっているディレクトリを探す。

次に、そのディレクトリに移動して同じように「du -sh *」を実行する。2回目以降はデータがキャッシュに残るし、対象も減るので1回目よりも早くコマンドは終了するはずだ。こうして特に容量を食っている場所へ潜っていって、最終的に元凶となっているファイルやディレクトリを特定する。よくあるのは、ログファイルが肥大化しているケースや、ファイルサーバの領域に巨大なデータが散在しているといったケースだ。Linuxサーバ管理者ならば、いずれは使うことになるコマンドなので、もしまだ使ったことがなければ1回は試しておくとよいだろう。