適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

Screenに現在のメモリ使用率を表示させてみた

過去に掲題のエントリーをどこかで見かけた記憶があるのですが、失念してしまいやむなく自作しました。


まずは下記のようなメモリの使用率を出力するshellを用意します。

#!/bin/sh
# echo `free | grep "buffers/cache" | awk '{print substr($3/($3+$4)*100,1,5)}'`'%'
# echo `free | grep "buffers/cache" | awk '{printf  "%3.1f", $3/($3+$4)*100}'`'%'
echo `free | awk '/buffers\/cache/{printf  "%3.1f", $3/($3+$4)*100}'`'%'

処理を簡単に説明します。
freeコマンドでメモリの状態を出力し、

$ free
             total       used       free     shared    buffers     cached
Mem:       2058796    1998692      60104          0      84788    1032096
-/+ buffers/cache:     881808    1176988
Swap:      1951740       3352    1948388

その結果から「buffers/cache:」のある行だけgrepして

# grep "buffers/cache"
-/+ buffers/cache:     881808    1176988

grep結果をawkして許されるのは小学生までだよねー
3つめ(881808:OSとアプリケーションが使用しているメモリサイズ)と4つめ(1176988:空きメモリサイズ)からメモリの使用率を算出して、小数点二桁くらい一桁(printf便利!)に揃えて

# awk '{print substr($3/($3+$4)*100,1,5)}
# awk '{printf  "%3.1f", $3/($3+$4)*100}'
awk '/buffers\/cache/{printf  "%3.1f", $3/($3+$4)*100}'

最後に「%」をくっつけています

echo 上の処理の結果'%'

このshellを適当なところに置きます。
今回、homeディレクトリに.screenディレクトリを掘り、mem.shとして保存しました。

~/.screen/mem.sh


次に.screenrcファイルに下記のような一行を追加します。

backtick 0 2 2 ${HOME}/.screen/mem.sh

そして、hardstatusまたはcaptionに「%0`」を追加すると完了です。

hardstatus string "memory : %0`"

この0は backtick のひとつめの引数(id)に該当し、例えば「backtick 1 2 2 ${HOME}/.screen/mem.sh」とした場合は「%1`」とします。


以上で完成です。


参考にさせて頂いたエントリー
screenのcaptionに東京電力の電力使用状況を表示するようにしてみた - ケーズメモ