最近、ps
コマンドを試してみましたが、長いパスが次の行(または2行)に折り返され、読みにくくなる場合があります。 ps
出力を別のプログラムにパイプして、出力をx
文字数に制限したい。
これが私がこれまで持ってきたものですが、うまくいきません:
_ps aux | cut -c1-$(stty size | cut -d' ' -f2)
_
$(stty size | cut -d' ' -f2)
は167に評価されますが、cut
の有効な入力ではないようです。
このタイプの構文をbashで機能させる方法はありますか?
以下の作品:
ps aux | cut -c1-$(stty size </dev/tty | cut -d' ' -f2)
これも機能します:
v=$(stty size | cut -d' ' -f2) ; ps aux | cut -c1-$v
問題は、stty
が機能するために、標準入力にttyを持っている必要があることです。上記の2つのアプローチはそれを解決します。
さらに別のオプションがあります。上記のコマンドでは、stty
のstdinとstdoutの両方がリダイレクトされますが、そのstderrはリダイレクトされません。それでも、ターミナルを指します。奇妙なことに、stty
は、入力としてstderrが指定されている場合にも機能します。
ps aux | cut -c1-$(stty size <&2 | cut -d' ' -f2)
zsh
、bash
、mksh
などの一部のシェルは、$COLUMNS
変数をターミナルの幅に自動的に設定するため、stty
here。
ps
のすべての実装で、非標準(BSDタイプ)構文をサポートして、端末の幅を自分で照会できるようにしました。私はあなたがそうしていないことに驚いています。ただし、COLUMNS
environment変数の内容が表示されることを期待しています。
だからあなたはできる:
export COLUMNS; ps aux
そうでない場合、
ps aux | cut -c"1-$COLUMNS"
行を折り返さないように端末に指示することもできます。
tput rmam
ps aux
ps
の出力を少し良く処理することもできます。
ps --width ${n:-$COLUMNS} ${opts} #set ps terminal width
ps -ww ${opts} #no Word wrap
ps -o ${only_interesting_output} ${opts} #trim output
これにより、必要に応じてps
に出力を解析して仕様に合わせることが指示されます。
もちろん、ワードラップを行わないと、情報が欠落するという問題があります。すべてのプロセスに本当にそれが必要ですか?その場合は、ポケットベルで開きます。
ps ww ${opts} | $PAGER
そうでない場合は、表示するものを指定します。
ps -o args= -p $pid
または、ps
に端末を明示的に通知することもできます--width
:
man ps
...
w
ワイド出力。幅を無制限にするには、このオプションを2回使用します。
-w
ワイド出力。幅を無制限にするには、このオプションを2回使用します。
--width n
画面の幅を設定します。
--width
は、追加のフィルターや補助プロセスを必要とせずに、要求された仕様に正確に機能します(これにより、-aux
出力がさらに煩雑になるだけです)そして$COLUMNS
上記のように、Stephaneが指摘するように、動的に動作することさえあります。
ただし、これらの不要なフィルターを追加しようとすると、|pipe
からanotherフィルターを使用して出力を解析できるようになることがよくあります。不要。もちろん、peopleは、ほとんどme。を意味します
上記の-o
utputオペランドを使用すると、ps
が表示する列をフィルタリングできます。また、=
assigmentを追加するときに、列に自由に名前を付けることもできます。割り当てを空のままにして、ターゲット-p
rocess $pid
を渡します。そのため、ps
からの出力は、$pid
コマンド名とそのargs
のみです。呼び出し時。そして-o
は、ps
が何を表示するか、または何を表示しないかを定義する方法の表面をかろうじて引っ掻きます。これは、特に次の方法で、私が推奨する方向です。
man ps
...
BSD構文を使用してシステム上のすべてのプロセスを表示するには:
ps ax
ps axu
プロセスツリーを印刷するには:
ps -ejH
ps axjf
スレッドに関する情報を取得するには:
ps -eLf
ps axms
セキュリティ情報を取得するには:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM
Root(実際の有効なID)として実行されているすべてのプロセスをユーザー形式で表示するには:
ps -U root -u root u
ユーザー定義のフォーマットですべてのプロセスを表示するには:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -Ao pid,tt,user,fname,tmout,f,wchan
SyslogdのプロセスIDのみを出力します。
ps -C syslogd -o pid=
PID 42の名前のみを印刷します。
ps -p 42 -o comm=