PR

[Linux] ディスクの容量不足を警告するスクリプト~仕組み編~

[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 (%)を超えていたらメール発射という内容のようだ。

コメント