「[Linux] ディスクの容量不足を警告するスクリプト~設置編~」で設置したスクリプトが、どのように動作するのかを勉強させてもらうことにする。というのも、コマンドの結果の一部を捉えて何かさせるというスクリプトは、今後も必要になるだろうから。
スポンサードリンク
仕組み
まずは以下の部分:
DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`
DVAL はDisk VALue な気がして、現在の容量を取得していそう。取得のためのコマンドは以下の部分だろう:
`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`
これは「|」によって連結されているから、もう少し分解すると:
/bin/df /usr/bin/tail -1 /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'
の3つのコマンドが順次行われている気がする。
ディスク容量の取得
df は、ディスクの容量に関する情報を得る。例えば$ df -m とした時の応答は次の通り:
$ df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda1 36470 20191 14452 59% / udev 462 1 462 1% /dev tmpfs 188 1 187 1% /run none 5 0 5 0% /run/lock none 469 1 469 1% /run/sh
解析行の取得
この結果がtail -1 に渡される。tail -1 は最終行を持ってきそう。
$ df -m| tail -1 none 469 1 469 1% /run/shm
「ファイルの最後の数行を表示(tailコマンド)」にも最終行を取得するコマンドとある。引数は何行取得するかを指定しているとのことで、デフォルトでは10 行。
正規表現で解析
最後の以下の部分は、その1行抜き出した中から必要な数値を得るための正規表現だと思われる:
/bin/sed 's/^.* \([0-9]*\)%.*$/\1/'
探しているのは「 /^.* \([0-9]*\)%.*$/ 」で、「XX%」な部分を探し、「XX」を返答する。とすると、この場合「1%」だから「1」を返答してくれそう。
$ df -m| tail -1 | sed 's/^.* \([0-9]*\)%.*$/\1/' 1
予想通りらしい。
勘違い
でも、知りたいのは「59%」の部分であって、しかし、次のコマンドは「59」を返す。
$ /bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'
どうしてだろう。あ、「df」じゃなくて「df /」となっているのを見逃していた:
$ df / -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/sda1 36470 20191 14452 59% /
そういうことか。あとは80 (%)を超えていたらメール発射という内容のようだ。
コメント