はじめに
Linuxのプロセス表示といえばps
コマンドです。これはUNIX的にパイプで繋いだりスクリプトに組み込んだりするには使いやすいのですが、単体で使うにはちょっといまいちな部分があります。
例えば
- 出力が色付けされない
- 値がいわゆるhuman readable(GとかMとか単位が自動でつくやつ)でない
- ターミナルの端で折り返す
- 検索しづらい
といったところです。
これらを解決するために、新しくプロセスの表示と検索を行うツールを作りました。
実装言語はRustで、対象プラットフォームは今のところLinuxのみです。
リポジトリ
インストール
Releasesから最新のバイナリをダウンロードしてPATHの通ったところに置いてください。
Rustをインストール済みの方は以下でもOKです。
cargo install procs
使い方
デフォルトの出力は以下のようになります。
まず、カラム毎に色分けされます。バイト数は自動で適切な単位になり、単位毎にも色分けされます。
%表示も同様に閾値毎に色分けされます。
デフォルトでは右端カラムはコマンドになりますが、長すぎる場合はターミナルの幅で切られます。
また、ps
コマンドで取得できないTCP/UDPの待ち受けポートやディスクIO(Read/Write)も表示されます。
次に検索機能です。procsは引数に検索キーワードを取ることができます。
例えば、検索キーワードをzsh
とした場合が以下です。
指定された引数は、数値とそれ以外で挙動が違い、デフォルトでは数値はPID
とTCP
、UDP
に、数値以外はUSER
とCommand
にマッチします。
また、数値は完全一致、それ以外は部分一致がデフォルトです。
数値で検索した場合は以下のようになります。
指定した6000/60000/60001/16723に関連するプロセスだけが出力されています。
これらにより、ユーザ名やバイナリ名で検索したい場合はかなり多めにマッチしますし、
逆にPID
やポート番号などがはっきりわかっている場合はそのプロセスだけピンポイントにマッチします。
カスタマイズ
デフォルトの挙動を変えたい場合は、~/.procs.toml
に設定します。
$ procs --config
でデフォルト設定に対応するTOMLが出力されるので、そこから変更するのが楽です。
ファイルを抜粋すると以下のようになっています。
[[columns]]
kind = "Pid"
style = "BrightYellow"
numeric_search = true
nonnumeric_search = false
[[columns]]
kind = "Username"
style = "BrightGreen"
numeric_search = false
nonnumeric_search = true
...
[style]
header = "BrightWhite"
unit = "BrightWhite"
[style.by_percentage]
color_000 = "BrightBlue"
color_025 = "BrightGreen"
color_050 = "BrightYellow"
color_075 = "BrightRed"
color_100 = "BrightRed"
[style.by_state]
color_d = "BrightRed"
color_r = "BrightGreen"
color_s = "BrightBlue"
color_t = "BrightCyan"
color_z = "BrightMagenta"
color_x = "BrightWhite"
[style.by_unit]
color_k = "BrightBlue"
color_m = "BrightGreen"
color_g = "BrightYellow"
color_t = "BrightRed"
color_p = "BrightRed"
color_x = "BrightBlue"
[search]
numeric_search = "Exact"
nonnumeric_search = "Partial"
[[columns]]
に表示したいカラムを列挙します。
一番上に書いたものが一番左に表示されます。
kind
はそのままカラムの種類でstyle
がカラムの色分けです。
(種類と色分けの完全なリストはREADMEにあります)
numeric_search
とnonnumeric_search
はそれぞれ数値検索と非数値検索にマッチするかどうかの設定です。
style
には表示内容によって色を変えられるものもあり、
ByPercentage
ByState
ByUnit
が該当します。
例えばByUnit
はバイト数表示などK,M,Gのような単位が自動でつく場合に単位毎に色分けします。
各単位に対応する色は[style.by_unit]
で設定します。
[style]
はヘッダ部の色設定、[search]
は検索の完全一致か部分一致を数値検索、非数値検索それぞれで設定できます。
おわりに
新しく作ったプロセス表示・検索ツールprocsの紹介でした。
とりあえず自分が必要な情報だけそろえた感じなので、
追加してほしいカラムなどありましたらIssueまでどうぞ。