[小ネタ][シェル芸]ディスク使用量が一番多いディレクトリを探す


nullpopopoみなさんこんにちは。(っ´∀`)っ ゃーこと濱田です。今年は140文字でおさまるワンライナーの紹介に力を入れていきたいと思います。今回は、LinuxやUNIXのサーバ運用でよくあるトラブル「ディスクがいっぱいだけど原因なんなの?」を一撃で調査することをテーマにしてみたいと思います。まずは以下のコマンドを叩いてみましょう。

[ (っ´∀`)っ@友の会 ~]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[ (っ´∀`)っ@友の会 Pictures]$ pwd
/home/(っ´∀`)っ/Pictures

ご覧のように、最初のワンライナー実行後にpwdコマンドで確認すると、カレントディレクトリが「Pictures」に移動したことがわかります。ホームディレクトリの下にある画像フォルダが一番充実しているということになりますね。それではもう一度、最初にご紹介したワンライナーを実行してみましょう。

[(っ´∀`)っ@localhost Pictures]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost 2013-01-06--10.05.57]$ pwd
/home/(っ´∀`)っ/Pictures/2013-01-06--10.05.57
[(っ´∀`)っ@localhost 2013-01-06--10.05.57]$ ls
IMG_0493.JPG  IMG_0507.JPG  IMG_0520.JPG  IMG_0533.JPG  IMG_0546.JPG  IMG_0559.JPG  IMG_0572.JPG  IMG_0585.JPG  IMG_0598.JPG  IMG_0611.JPG  IMG_0624.JPG  IMG_0638.JPG
IMG_0494.JPG  IMG_0508.JPG  IMG_0521.JPG  IMG_0534.JPG  IMG_0547.JPG  IMG_0560.JPG  IMG_0573.PNG  IMG_0586.JPG  IMG_0599.JPG  IMG_0612.JPG  IMG_0625.JPG  IMG_0639.JPG
IMG_0495.JPG  IMG_0509.JPG  IMG_0522.JPG  IMG_0535.JPG  IMG_0548.JPG  IMG_0561.JPG  IMG_0574.JPG  IMG_0587.JPG  IMG_0600.JPG  IMG_0613.JPG  IMG_0626.JPG  IMG_0640.JPG
IMG_0496.JPG  IMG_0510.JPG  IMG_0523.JPG  IMG_0536.JPG  IMG_0549.JPG  IMG_0562.JPG  IMG_0575.JPG  IMG_0588.JPG  IMG_0601.JPG  IMG_0614.JPG  IMG_0627.JPG  IMG_0641.JPG
IMG_0497.JPG  IMG_0511.JPG  IMG_0524.JPG  IMG_0537.JPG  IMG_0550.JPG  IMG_0563.JPG  IMG_0576.JPG  IMG_0589.JPG  IMG_0602.PNG  IMG_0615.JPG  IMG_0628.JPG  IMG_0642.JPG
IMG_0498.JPG  IMG_0512.JPG  IMG_0525.JPG  IMG_0538.MOV  IMG_0551.JPG  IMG_0564.JPG  IMG_0577.JPG  IMG_0590.JPG  IMG_0603.PNG  IMG_0616.JPG  IMG_0629.JPG  IMG_0643.JPG
IMG_0499.JPG  IMG_0513.JPG  IMG_0526.JPG  IMG_0539.JPG  IMG_0552.JPG  IMG_0565.JPG  IMG_0578.JPG  IMG_0591.JPG  IMG_0604.JPG  IMG_0617.JPG  IMG_0630.JPG
IMG_0500.JPG  IMG_0514.JPG  IMG_0527.JPG  IMG_0540.JPG  IMG_0553.JPG  IMG_0566.JPG  IMG_0579.JPG  IMG_0592.JPG  IMG_0605.JPG  IMG_0618.JPG  IMG_0632.JPG
IMG_0501.JPG  IMG_0515.JPG  IMG_0528.JPG  IMG_0541.JPG  IMG_0554.JPG  IMG_0567.JPG  IMG_0580.JPG  IMG_0593.JPG  IMG_0606.JPG  IMG_0619.JPG  IMG_0633.PNG
IMG_0502.JPG  IMG_0516.JPG  IMG_0529.JPG  IMG_0542.JPG  IMG_0555.PNG  IMG_0568.JPG  IMG_0581.JPG  IMG_0594.JPG  IMG_0607.JPG  IMG_0620.JPG  IMG_0634.JPG
IMG_0504.JPG  IMG_0517.JPG  IMG_0530.JPG  IMG_0543.JPG  IMG_0556.JPG  IMG_0569.JPG  IMG_0582.JPG  IMG_0595.JPG  IMG_0608.JPG  IMG_0621.JPG  IMG_0635.JPG
IMG_0505.JPG  IMG_0518.JPG  IMG_0531.JPG  IMG_0544.JPG  IMG_0557.JPG  IMG_0570.PNG  IMG_0583.JPG  IMG_0596.JPG  IMG_0609.JPG  IMG_0622.JPG  IMG_0636.JPG
IMG_0506.JPG  IMG_0519.JPG  IMG_0532.JPG  IMG_0545.JPG  IMG_0558.JPG  IMG_0571.JPG  IMG_0584.JPG  IMG_0597.JPG  IMG_0610.JPG  IMG_0623.JPG  IMG_0637.JPG

画像ディレクトリの中にいくつかディレクトリがある中で、容量を一番消費しているディレクトリに移動しています。もう一度ここでワンライナーを実行してみましょう。

[(っ´∀`)っ@localhost 2013-01-06--10.05.57]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost 2013-01-06--10.05.57]$ pwd
/home/(っ´∀`)っ/Pictures/2013-01-06--10.05.57

カレントディレクトリが変わりません。つまり、 /home/(っ´∀`)っ/Pictures/2013-01-06--10.05.57 ディレクトリがホームディレクトリの中で一番ディスク容量が大きい、ということになります。それでは、ルートディレクトリ「/」から順に実行してみましょう。

[(っ´∀`)っ@localhost 2013-01-06--10.05.57]$ cd /
[(っ´∀`)っ@localhost /]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost usr]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost share]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost locale]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost ru]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost LC_MESSAGES]$ cd $(sudo find `pwd` -type d | xargs du -sk | sort -n | tail -n 2 | head -n 1 | awk '{print $NF}')
[(っ´∀`)っ@localhost LC_MESSAGES]$ pwd
/usr/share/locale/ru/LC_MESSAGES
[(っ´∀`)っ@localhost LC_MESSAGES]$ du -sh `pwd`
10M	/usr/share/locale/ru/LC_MESSAGES
[(っ´∀`)っ@localhost LC_MESSAGES]$ du -sk `pwd`/* | sort -n | tail -n 1
608	/usr/share/locale/ru/LC_MESSAGES/gcc.mo

ルートディレクトリから順にワンライナーを実行し、 /usr/share/locale/ru/LC_MESSAGES が一番ディスク容量を消費していることがわかりました。あとはここでduコマンドを叩けば、ディレクトリ内のディスク消費量がわかりますし、duで表示する単位をキロバイトに統一してソートすれば、ディレクトリ内でどのファイルが一番容量を消費しているか、がわかります。ね、簡単でしょ?

[amazonjs asin="B007P71J9W" locale="JP" title="Intel SSD 330 Series Maple Crest 120GB MLC 2.5inch 9.5mm Reseller Box SSDSC2CT120A3K5"]