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

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

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

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

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

●Linuxの場合

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

20141220_000000

 

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

●HP-UXなどの場合

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

20141220-000000

 

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

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

20141220_000001

 

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

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

20141220_000002

 

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

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

20141220_000003

 

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

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

20141220_000005

 

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

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

20150307_000000

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

 

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

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

 

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

Sponsored Links

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

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

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

20141220_000004

 

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

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)