「find」コマンドを使用する方法と、「du」コマンドを使用する方法の2種類について説明しています。
指定したサイズ以上のファイルを探す
「find」コマンド「-size」オプション使用し、「xargs」コマンドと組み合わせることで指定したサイズより大きいデータを探す事ができます。
書式
find [検索を行いたいディレクトリ] -size +[データサイズ] | xargs ls -l | sort -rn
実行例
「/home」ディレクトリ内でサイズが300M以上のデータを検索してみた実行例です。
# find /home -size +300M | xargs ls -l | sort -rn -rw-rw-r-- 1 tamohiko tamohiko 1073741824 2月 23 17:02 /home/tamohiko/scp_test/1G -rw-r--r-- 1 root root 1000000000 7月 8 17:39 /home/test/1G -rw-r--r-- 1 root root 500000000 7月 8 17:40 /home/test2/500M
検索を行いたいディレクトリを変更したい場合は、「/home」の部分を変更することで検索ディレクトリの変更ができます。
検索するデータのサイズを変更したい場合は「300M」の部分を変更することで、データの大きさを変更することが出来ます。
サイズが大きい順に表示させる
「du」コマンドと「sort -rn」コマンドを組み合わせることで、サイズが大きいファイルやディレクトリを大きい順に表示させることが出来ます。
また、「head」コマンドを組み合わせることで、表示させる行数を指定することもできます。
書式
サブディレクトリ内のディレクトリも表示させる場合
du -k /[ディレクトリ名]/* | sort -rn | head -[表示させたい行数]
サブディレクトリ内のディレクトリは表示させない場合
du -sk /[ディレクトリ名]/* | sort -rn | head -[表示させたい行数]
「-s」オプションがある場合とない場合の比較
「du」コマンドに「-s」オプションを付けるか付けないかで表示結果が異なりますので、実際に「/etc」ディレクトリを検索対象として表示結果を比較してみます。
「-s」オプションなし
「/etc」内のサブディレクトリ内の中にあるディレクトリまで表示されています。
# du -k /etc/* | sort -rn | head -10 11572 /etc/selinux 11564 /etc/selinux/targeted 6204 /etc/udev 5668 /etc/selinux/targeted/modules/active 5668 /etc/selinux/targeted/modules 4828 /etc/selinux/targeted/modules/active/modules 3688 /etc/selinux/targeted/policy 2188 /etc/selinux/targeted/contexts 2092 /etc/selinux/targeted/contexts/files 1472 /etc/pki
「-s」オプションあり
「/etc」ディレクトリ内のサブディレクトリまでしか表示され無いため、サブディレクトリごとのデータサイズが分かりやすいです。
# du -sk /etc/* | sort -rn | head -10 11572 /etc/selinux 6204 /etc/udev 1472 /etc/pki 656 /etc/services 344 /etc/sysconfig 280 /etc/ssh 260 /etc/asciidoc 240 /etc/munin 164 /etc/httpd 156 /etc/lynx.cfg
このように「-s」オプションがあるかないかで、表示内容が変わってくるので用途によって使い分けて下さい。
たとえば、「/home」ディレクトリでどのユーザがデータをため込んでいるかを調べる場合は「-s」を付けるとか、ユーザのホームディレクトリ内のどのディレクトリにデータが多く格納されているのかを確認したい場合は、「-s」オプションを付けないといったように、使い分けが必要になってきます。
duコマンド説明
「-k」オプションはサイズの単位をKB単位で表示させています。「-m」でMB単位での表示とかも可能ですが、「-h」オプションはサイズの単位が混在してしまい、ソートの結果が狂ってしまうので使用しないでください。
調査するディレクトリ名の後にある「*」は、調査対象ディレクトリのサイズを表示せないためにつけています。
sortコマンド説明
「-n」オプションは、先頭の数字や記号を数値とみなしてソートさせます。
「-r」オプションは、ソートした順序を逆にして表示させます。
du -sk /[ディレクトリ名]/* | sort -rn | head -[表示させたい行数]
「-s」オプションはサブディレクトリは表示させずに、指定されたディレクトリの合計容量を表示させます。
実行例
ホームディレクトリに大量のデータをため込んでいるユーザTOP5を表示させてみた例です。
# du -sh /home/* | sort -rn | head -5 954M /home/test 512M /home/test2 429M /home/test3 287M /home/test4 191M /home/test5
こんな感じで、データをため込んでいるユーザを一発で発見することが出来ます。
チェックスクリプト
スクリプトを作成し「cron」に登録することで、毎日自動的にデータ量を確認することが出来ます。
変数説明
設定が必要な変数の説明です。
変数 | 設定内容 |
---|---|
CKDIR | チェック対象ディレクトリを設定 |
DIS_NUM | 表示させたい件数を設定 |
MAILADDR | 結果を送りたいメールアドレスを設定 |
スクリプト
作成したスクリプトに実行権限をつけるのを忘れないでくださいね。
#!/bin/bash # check dirctory CKDIR=/home # display number DIS_NUM=10 # send mail address MAILADDR=tamohiko@gmail.com # run date DAY=`date +"%Y-%m-%d"` # mail subject MAILSUB="$DAY $CKDIR Space Use User TOP $DIS_NUM" # disk check command /bin/du -sm $CKDIR/* | sort -rn | head -$DIS_NUM | mail -s "$MAILSUB" $MAILADDR
コメント