新年明けましておめでとうございます。
今年こそは、頻繁にブログの更新をしよう! と、考えていますが、さて、どうなりますか・・・
お正月休みの最終日、少し暇なので「GeekTool」でデスクトップに以下の情報を表示してみました。因みに、GeekToolはMacのデスクトップにシェルのコマンド結果やイメージ等を表示するソフトです。従って、シェルをご存知の方は様々な情報を表示する事が出来る、非常に素晴らしいフリーソフトです。
・CPU使用率及びプロセスが使用しているポート
・システム稼動時間(+MacOSのバージョン情報)
・システム稼働時間を音声通知
さて、ここで少し困ったのが、システム稼働時間の表示。uptimeコマンドの結果を加工して表示するのですが、どうも出力結果の情報数(フィールド)や形式が変化するようです。具体的には、次の様な表示です。
----------
5:54 up 55 secs, 2 users, load averages: 1.58 0.43 0.16
5:54 up 1 min, 2 users, load averages: 1.86 0.53 0.20
5:55 up 2 mins, 2 users, load averages: 1.60 0.59 0.23
6:54 up 1 hr, 2 users, load averages: 0.65 0.66 0.60
6:54 up 1:01, 2 users, load averages: 0.55 0.64 0.60
0:44 up 2 days, 11 hrs, 2 users, load averages: 0.93 0.76 0.69
0:45 up 2 days, 11:01, 2 users, load averages: 0.59 0.69 0.67
----------
時刻がHH:MMの形式に統一されていれば、加工が容易なのですが・・・
いろいろ悩んだ結果、awkを使って加工することにしました。久し振りのawkなのでやや時間を要しましたが、何とか完成。少し頭の体操をさせてもらいました。簡単な処理とはいえ、ロジックを考えるのは結構面白いです。加工処理の流れは、次の通りです。
- uptimeコマンドの結果から、全てのカンマを削除する。 (CSVではないので)
- 変数「フィールドNo」を3に初期化する。(3つ目以降の情報から必要なので)
- 結果に"day"の文字がある場合は、以下の処理を行う。
・フィールドの3番目(日数)と4番目(day or days)を表示する。
・フィールドNoを5に進める。 - フィールドNoに該当する内容を表示する。
- 結果に"hr"、"min"、"sec"の文字がある場合は、以下の処理を行う。
・フィールドNoを一つ進める。
・フィールドNoに該当する内容を表示する。
上記の流れ(下の項番2)を含めたシェル内容は、以下の様になりました。完璧ではないかもしれませんので、あしからず。
- CPU使用率及びプロセスが使用しているポートの確認(表示は等幅フォントで)
ps -Acro "command %cpu %mem" | head -n 11 ; echo --------------------------- ; lsof -P -i -n | awk '{printf("%-22s%5s\n",$1,$8)}' | uniq - システム稼動時間とMacOSのバージョン確認
uptime | awk '{gsub(",", " ", $0)} ; {printf("Time since last system boot: ")} ; {T_fn=3} ; $0 ~ /day/{printf($3$4" ") ; T_fn=5} ; {printf($T_fn" ")} ; $0 ~ /(hr|min|sec)/{T_fn++ ; {printf($T_fn" ")}}' ; sw_vers -productVersion | awk '{print " (Ver:"$1") "}' - システム稼働時間を音声通知(PCの使い過ぎ防止を兼ね)
uptime | awk '{gsub(",", " ", $0)} ; {printf("Time since last system boot: ")} ; {T_fn=3} ; $0 ~ /day/{printf($3$4" ") ; T_fn=5} ; {printf($T_fn" ")} ; $0 ~ /(hr|min|sec)/{T_fn++ ; {printf($T_fn" ")}}' | say |
最近のコメント