Macでtmuxのステータスラインに起動時間/ロードアベレージ/メモリ使用率を表示
タイトルの通り基本Mac限定です。
なぜかというと、メモリ使用率の取得に vm_stat (vmstatじゃないよ)というコマンドを使用しているからです。
vmstatはLinux系では有名なコマンドですが、残念ながらMacにはないんですよね。
Macのvm_statは名前は似ているけど表示される内容は随分違います。
あとメモリ使用率を調べるコマンドといえば free ですが、これもMacにはないですしね。
では前置きはこれくらいにして、どんな感じになるのかをどうぞ
一応説明すると、左から、LANG、起動時間、ロードアベレージ、メモリ使用率、現在時刻が表示されています。
起動時間が1日以上になるとこんな感じになります。
っで肝心の方法ですが、tmuxのステータスラインから自分で作成したスクリプトを実行するという方法です。
ですので以下の3つのスクリプトをPATHの通った場所に置いて、実行権限を付与して下さい。
起動時間
pc-running-time
#!/bin/sh uptime | sed -e 's/.* up *\(.*\)/\1/' -e 's/\(.*\),.* user.*/\1/' | awk -F, '{print $1 $2}' | tr -s ' '
メモリ使用率
追記: 2013/02/01
改良版を作成しましたので以下をご使用下さい。
これはちょっと長いです。
デバッグ用の関数などは不要なら削除して下さい。
used-mem
#!/bin/sh ## debug mode #DEBUG="yes" if [ "$DEBUG" = "yes" ]; then set -x fi ## vm_stat コマンドのチェック if ! type vm_stat > /dev/null 2>&1; then exit 1 fi # # メモリ使用率(%)を求める # 精度は小数点第1位までとする # calculate_used_mem() { # vm_stat # page size of 4096 bytes VM_STAT=$(vm_stat) PAGES_FREE=$(echo "$VM_STAT" | awk '/Pages free/ {print $3}' | tr -d '.') PAGES_ACTIVE=$(echo "$VM_STAT" | awk '/Pages active/ {print $3}' | tr -d '.') PAGES_INACTIVE=$(echo "$VM_STAT" | awk '/Pages inactive/ {print $3}' | tr -d '.') PAGES_SPECULATIVE=$(echo "$VM_STAT" | awk '/Pages speculative/ {print $3}' | tr -d '.') PAGES_WIRED=$(echo "$VM_STAT" | awk '/Pages wired down/ {print $4}' | tr -d '.') # 空きメモリ FREE_MEM=$(($PAGES_FREE + $PAGES_SPECULATIVE)) # 使用中メモリ USED_MEM=$(($PAGES_ACTIVE + $PAGES_INACTIVE + $PAGES_WIRED)) # 合計 TOTAL_MEM=$(($FREE_MEM + $USED_MEM)) # 使用中メモリ(%) # 小数点第1位まで求めて後から小数点文字(ドット)を挿入 USED_MEM_PERCENT=$(echo "$(($USED_MEM * 1000 / $TOTAL_MEM))" | sed -e 's/\(.*\)\([0-9]\)/\1.\2/' -e 's/^\./0./') echo "${USED_MEM_PERCENT}" # RET return 0 } # Debug debug() { if [ "$DEBUG" = "yes" ]; then echo "PAGES_FREE: $PAGES_FREE pages" echo "PAGES_FREE: $(($PAGES_FREE * 4096 / 1024 / 1024 )) MB" echo "PAGES_ACTIVE: $PAGES_ACTIVE pages" echo "PAGES_ACTIVE: $(($PAGES_ACTIVE * 4096 / 1024 / 1024)) MB" echo "PAGES_INACTIVE: $PAGES_INACTIVE pages" echo "PAGES_INACTIVE: $(($PAGES_INACTIVE * 4096 / 1024 / 1024)) MB" echo "PAGES_SPECULATIVE: $PAGES_SPECULATIVE pages" echo "PAGES_SPECULATIVE: $(($PAGES_SPECULATIVE * 4096 / 1024 / 1024 )) MB" echo "PAGES_WIRED: $PAGES_WIRED pages" echo "PAGES_WIRED: $(($PAGES_WIRED * 4096 / 1024 / 1024)) MB" echo "FREE_MEM: $FREE_MEM pages" echo "FREE_MEM: $(($FREE_MEM * 4096 / 1024 / 1024)) MB" echo "USED_MEM: $USED_MEM pages" echo "USED_MEM: $(($USED_MEM * 4096 / 1024 / 1024)) MB" echo "TOTAL_MEM: $TOTAL_MEM pages" echo "TOTAL_MEM: $(($TOTAL_MEM * 4096 / 1024 / 1024)) MB" echo "---------------" # 搭載メモリ(理論値): 8GBの場合 echo "TOTAL_MEM: $((8 * 1024)) MB (Theoretical value)" echo "---------------" echo "USED_MEM: $(($USED_MEM * 1000 / $TOTAL_MEM)) %" fi } RET=0 ## メイン処理 ----- calculate_used_mem RET=$? ## デバッグ ----- #DEBUG=yes debug ## exit exit $RET
tmuxの設定
※ tmuxへの設定前に、念のため各スクリプトをそれぞれ単独で実行して動作確認を行なってみてください。
設定ファイル(.tmux.conf)に以下のように記述します。
カラーや区切り文字などはお好みで変更して下さい。
# ステータスライン - Right set -g status-right '< #[fg=black,bold]#(echo $LANG)#[default] < #[fg=blue]up #(pc-running-time)#[default] < #[fg=magenta](#(loadaverage)) Mem #(used-mem)%%#[default] < #[fg=red,bold]%y/%m/%d(%a)%H:%M:%S#[default] ' # Rightの表示領域最大長 set -g status-right-length 90
以上です。
tmuxをさらにカッコよくしたい方へ
カッコイイtmuxを目指して!! - tmux-powerlineを改良したよ - よんちゅBlog
ーーー
それにしても uptime のあの加工しづらいフォーマットはなんとかならないんだろうか
vm_statもなんか行末に.(ドット)とか入ってるし、あれはいらないんじゃないだろうか