psコマンドにkbではなくmbでメモリを表示させる方法は?


11

Linuxのpsコマンドは、rssのようなさまざまなメモリ使用量をデフォルトで表示します。のようにMBまたはGBで表示する方法はありls -s --human-readableますか?


1
言及man psがないことから、そのような組み込みオプションはないことがわかります。
Ulrich Schwarz 2017年

回答:


20

私の知る限りps、オプション付きの純粋なコマンドだけではそれを達成することはできません。ただし、次のようなテキストプロセッサを使用してawk、必要な処理を実行できます。

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'

これはps、最初の行を除いてすべての行から結果を取得し、通常はKBである5番目の列を置き換え、MBにMサフィックスを追加します。

これをエイリアスにして.bashrcファイルに保存できるので、などの方法で呼び出すことができますmyps

ほとんどの人は、フォーマットを保持する方法、または他の単位と精度を使用する方法を尋ねています。

単純なバージョンでは、column -t出力フィルターを使用できます。

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t

ただし、これは最後の列のスペースを正しく認識しません。残念ながら、テキストのフォーマットを処理し、独自のフォーマット文字列をのprintfようなフォーマットで準備する必要があります。

ps afu | awk 'NR==1 {o=$0; a=match($0,$11);}; NR>1 {o=$0;$5=int(10*$5/1024)/10"M";}{ printf "%-8s %6s %-5s %-5s %9s %9s %-8s %-4s %-6s %-5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, substr(o, a);}'

説明:

  • NR==1条件は最初の行のみ(ヘッダー)です。元のps出力を使用して、COMMANDがどこから始まっているかを判別します。
    • o=$0 行を変更せずに保存して後で使用できるようにする
    • a=match($0,$11) 11番目のフィールドの位置を検索します(これは、COMMAND列が元の出力で開始する場所でなければなりません)
  • NR>1次の行(データ)用です。5番目のフィールドを変更します。
    • $5=int(10*$5/1024)/10"M" 値を小数点以下1桁のメガバイトに変更し、接尾辞「M」を追加します。
    • printfは、列のようなフレーバーですべてのフィールドを表示します。
      • %-10s手段s文字列、のための10ワイド10文字のために、-左の整列のために
      • %8s手段s文字列、のための8ワイド8つの文字のため、と理由がないの-は、このフィールドの出力は右詰めです。
    • substr(o, a)前の条件で計算さoれた位置から始まる元の行の(したがって以前に保存された)サブストリングをa取得するため、スペースを保持したままコマンド出力を表示できます。

3
GB用に変更され、小数点以下2桁まで(例: 1.23GB):ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
mahemoff '19

1
psフォーマットを維持しながら同じ目標を達成することは可能ですか?タブは完全に取り除かれますawk
Chris

あなたはintとしてキャストしているようですが、1.2Mのように10進数にすることは可能ですか?
JavaSheriff

なぜタブがないのですか?
Alex78191

@ Alex78191:テーブルのような出力でフォーマットするための代替コマンドを追加
DevilaN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.