Linux/UNIXで容量の大きいファイル&ディレクトリを調べる

LinuxやUNIXを使っていると、あるパーティションの容量(たとえば、/var/logなど)がいっぱいになってしまうことがある。 そういった時は、dfコマンドなどで各パーティションの容量を確認し、そのパーティション内で容量が大きくていらないファイルやディレクトリを削除したり、別のパーティションに移動させる対処が必要になる。

今回は、そんな容量の大きいファイルやディレクトリを確認する方法について記述する。

1.容量の大きいファイルを調べる

Linuxの場合、「-S」オプションを付与することでファイル容量の大きい順に出力する。

Linuxの場合

ls -lhS 調べたいディレクトリ

なお、HP-UXなどの古いOSでは「-S」オプションが存在しない。 そのため、sortコマンドと組み合わせる事で同様の出力を求める。

HP-UXなどの場合

$ ls -l 調べたいディレクトリ | sort -nr -k5

…と、2つのやり方があるのだが、この方法では指定したディレクトリの直下にあるファイルしか出力してくれない。 サブディレクトリを含め、容量の大きいファイルを探す場合は、以下のようにすると良いだろう。

ls -la $(find 調べたいディレクトリ -type f) | sort -nr -k5

headコマンドにパイプで渡す事で、容量の大きい上位何ファイルを出力することも出来る。

ls -la $(find 調べたいディレクトリ -type f) | sort -nr -k5 | head -10

上記の方法でファイル名のみを取得する場合、以下のようにする。

ls -la $(find 調べたいディレクトリ -type f) | sort -nr -k5 | awk -F' ' '{for(i=9;i<NF;i++){printf("%s%s",$i,OFS=" ")}print $NF}'

ファイルサイズとファイル名を取得する場合は以下。

$ ls -la $(find 調べたいディレクトリ -type f) | sort -nr -k5 | awk -F' ' '{for(i=9;i<NF;i++){printf("%s%s",$i,OFS=" ")}print $5,$NF}'


2015/03/07追記

もしくは、duコマンドの「-a」オプションを利用すると良いだろう。 「a」オプションでファイルごとの容量を確認することが出来るので、「b」オプション(バイト単位で出力)と合わせて実行する。

du -ab 調べたいディレクトリ | sort -nr

なお、この出力方法だと必然的にディレクトリの容量が上位に出力されることになる。


2016/03/24 追記

ルートディレクトリを指定したりすると、引数が大きすぎて表示出来ないというエラーが出る場合がある。 この場合は、サブシェルで対応するよりは素直にxargsを用いると良いだろう。

find / -type f | xargs -n 1 -I{} ls -al "{}" | sort -nr -k5 | head -10

この時、容量の表示を人間が見やすいように加工する場合は、numfmtコマンドと組み合わせると良いだろう。

2.容量の大きいディレクトリを調べる

容量の大きいディレクトリを調べるには、duコマンドを用いる。 以下のコマンドで、サイズの大きいディレクトリ順に出力している。

du -b /調べたいディレクトリ | sort -nr

headなどをつなげれば、上位のディレクトリについて確認することが可能だ。 注意したいのが、duではlsと違いデフォルトではブロックサイズで容量の計算をしている点。そのため「-b」オプションを付けないと、lsで出力した時の容量と若干の違いがある。