duでディレクトリ・ファイル容量を調べる

8月 8, 2010

duはLinuxの基本的なコマンドではあるが意外と使いこなせていなかったりするので、
改めてメモしておく。

その前に、dfとduの使い分け。dfはディスクの容量を確認、duはディレクトリや
ファイル容量を確認する時に利用する。
後述するが、この辺りの認識が定まっていないと混乱することがある。

単体のduコマンドは、カレントディレクトリとそのサブディレクトリの使用量を出力する。
配下にファイルもあり両方の値を出力させたい場合は、以下のようにする。
この場合カレントディレクトリ自体の容量は出力しない。

# du ./*


カレントディレクトリで、ディレクトリ及びファイルの容量を個別に出力
(カレントディレクトリ及びサブディレクトリが対象となる)

# du -a


個人的によく使うのは、集計のみを出力する-sオプション(summarize)。
以下はカレントディレクトリの容量のみ、分かりやすい単位で出力する。

# du -sh


カレントディレクトリで、配下のディレクトリの容量を出力。
(カレントディレクトリは除外され、ファイルは含まれる)

# du -s *


カレントディレクトリの容量のみを出力(サブディレクトリを含めない)

# du -s


ルートディレクトリの名ディレクトリの容量だけ確認したい場合は以下のように。
これも使用頻度高いかも。

# du -sh /*


カレントディレクトリで、サブディレクトリの容量を値の大きい順に並び替えて出力する。
(カレントディレクトリ自体も含まれる。ファイルは含まれない)

# du | sort -nr


カレントディレクトリの容量出力を除外したかったら、以下のようにする。

# du ./* | sort -nr


カレントディレクトリで配下のディレクトリを集計後容量を、サイズが大きい順に出力。
値の出力結果は上記 “du ./* | sort -nr” と同様となる。

# du -s * | sort -nr


上記コマンドの結果表示を、上位10位までにする。

# du -s * | sort -nr | head -10


小さい順に並べるとしたらこんな感じ。でも、普通使わないだろうな・・・

# du ./* | sort -t 1 -n


-hオプションを利用すると分かりやすい単位で表示してくれてよいのだが、
sortにパイプする場合は使えないので注意。
“du -sh * “はOKでも、”du -sh * | sort -nr”は正しくソートされないのでNGとなる。

ディレクトリの容量を調べることが多いduではあるが、もちろん個別にファイルの
容量を調べる時にも使える。

# du -h /usr/local/tomcat/logs/catalina.out


ここで書くまでもないが、オプションの説明も一応。
サイズ表示指定オプション-b / k / m / hは、他のコマンドと共通のため省略。

-a ディレクトリの他にファイルについても出力する
-c すべての容量の総計を出力する
-l リンクも集計に含める
-s 引数で指定したファイルやディレクトリの総計を出力する
-D シンボリックリンクファイルは元ファイルの容量を集計する
-L 全てのシンボリックリンクをたどる
-S 個々のディレクトリでサブディレクトリを含めずに出力する
-x 違うファイルシステムは集計から除外する
※外部ボリュームがマウントされている階層は追跡しない


最後に、再びdfとduの違いにおける注意点を。
dfとduで表示結果が大幅に異なる場合がある。duでルートボリュームの容量を
確認すると余裕があるのに、dfでみると逼迫していたり。
そんな場合は、以下の例が疑わしいかもしれない。

プロセスがファイルを open したままの状態でファイルを削除しても、
プロセスが close しない限りディスクの領域を解放しない。

つまり・・・

見かけ上は消えている ( du ではカウントされない ) が、プロセスが掴んでいるため
kernel上ではまだ残っている扱いになる ( df の方でカウントされる ) ファイルがある。


http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21569&forum=10より抜粋。


これも結局、dfはディスク容量を出力するが、duはあくまでファイルの容量を出力
するものだという認識が前提にあれば納得できる。
実は今までその辺曖昧だった、、、(汗)

Categories: Linuxコマンド

No Responses so far | Have Your Say!

Comments are closed.