実施例1

実施例1

LinuxpsコマンドはRSSなどの他のメモリ使用量を表示します(常駐セットサイズ)、デフォルトサイズはkB単位です。 MBまたはGB単位で表示する方法はありますかls -s --human-readable

答え1

psAFAIKオプションを含む純粋なコマンドでは簡単に行うことはできません。しかし、例えば、いくつかのテキストプロセッサを使用してawk所望のタスクを実行させることができる。

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

これは、結果を取得し、ps最初の行を除く各行に対して通常KB単位の5番目の列を置き換え、MBにMサフィックスを追加します。

エイリアスとして作成して保存できます。.bashrcmyps.

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

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条件は最初の行(タイトル)にのみ適用されます。 COMMANDが始まる位置を決定するために、生のps出力を使用します。
    • o=$0後で使用するために変更されていない行全体を保存します。
    • a=match($0,$11)11番目のフィールドの位置を見つけます(これは元の出力でCOMMAND列の先頭でなければなりません)。
  • NR>1次の行(データ)について。 5番目のフィールドを変更します。
    • $5=int(10*$5/1024)/10"M"値を小数点以下の1桁のメガバイトに変更し、「M」サフィックスを追加します。
    • printf はすべてのフィールドを列と同じように表示します。
      • %-10s左揃えの10文字幅のs文字列を表します。10-
      • %8ss8文字の幅の文字列を表し、出力が8ないため、-フィールドは右揃えになります。
    • substr(o, a)o前の条件が評価された場所から始まり、元の行(したがって以前に保存された)のサブストリングを取得するため、aスペースを維持しながらコマンド出力を表示できます。

答え2

私は同じ問題の解決策を見つけるためにここに来ました。驚くべきことに、まだ良い答えはありません。私はこのスレッドとオンラインで読んだ他のページに基づいて少し柔軟な修正をしました。

内容を読みやすくするために自動範囲機能を作成し、フィールドに使用しvszましたrss

また、はい 実際の方法任意のフィールド区切り文字を強制的に使用しますps。これが私がする方法です:

マンページ字幕のフィールド記述子を使用するAIX FORMAT DESCRIPTORSと、文書化されていないように見えるトリックが見つかりましたps。 USERやVSZなどの操作を実行すると、%各出力行の前に文字が含まれているようです。試してみるとどうなるのだろうか。 1行に1つずつ表示します。いいですね。空白のないランダムな文字列はどうですか?はい! !%U%z%%%しかし、明らかにあなたは持つ%%期待通りに動作するようにしてください。%わからない。有効なフィールド記述子であることを確認するために、次psのすべての項目を解析しようとします。したがって、問題を避けるために%文字列の末尾に保管するのが最も安全です。FOOBARBIGSTRINGBLABLA%%

これで、有効なデータの一部になる可能性が比較的低い文字列を思い出してください。特にこれをcmdフィールドとして使用する場合はさらにそうです。zzz:::zzzそうは思えません。%%最後に追加の項目を追加して機能しましょう。zzz:::zzz%%これは出力にzzz:::zzz%

awk複数文字のフィールド区切り文字を処理できる出力を処理しており、awk照会をzzz:::zzz%フィールド区切り文字として指定します。

|head -n20最後のステップは、|cut -c -250出力を20行に制限し、250文字以降の各行を切り取り、端末をきれいに保つことです。実用的なスクリプトの目的でそれらを削除することもできます。

編集する: この例を使用して、すべてのフィールドに基づいて並べ替えることができることを指摘するために変数を追加しました。フィールド名はpsマンページのタイトルの下にあります。STANDARD FORMAT SPECIFIERS

編集2: リクエストに応じて、任意のフィールド区切り文字がどのように機能するか、およびフィールド区切り文字を選択する理由の詳細な説明を追加しました。

実施例1

sortbyfield="rss"; fsep="-o zzz:::zzz%% -o"; ps ax o user:16 $fsep pid $fsep pcpu $fsep pmem $fsep vsz $fsep rss $fsep tty $fsep stat $fsep lstart $fsep time:16 $fsep cmd  --sort -$sortbyfield | awk 'function setprefix(num){{n_suffix=1; while(num > 1000 && n_suffix < suffixes_len) {num /= 1024; n_suffix++;}; num=int(100*num)/100suffixes[n_suffix]}; return num} BEGIN{suffixes_len=split("kB MB GB TB PB EB ZB",suffixes);FS="zzz:::zzz%";} NR>1 {$5=setprefix($5);$6=setprefix($6); }{ printf "%-16s %6s %-5s %-5s %9s %9s %-8s %-8s %-25s %-18s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11;}' |head -n20 |cut -c -250

出力:(少し整理された例)

USER                PID %CPU  %MEM        VSZ       RSS TT       STAT                      STARTED              TIME   CMD
gdm                1474  0.0   0.3     2.87GB  182.86MB tty1     Sl+      Sat Jun 18 01:31:44 2022          00:34:40   /usr/bin/gnome-shell
gdm                1370  0.0   0.0    171.3MB   34.31MB tty1     Sl+      Sat Jun 18 01:31:43 2022          00:01:56   /usr/libexec/Xorg vt1 -displayfd 3 -auth /run/user/42/gdm/Xauthority -background none -noreset -keeptty -verbose 3
gdm                1552  0.0   0.0   686.07MB   20.14MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:40   /usr/libexec/gsd-color
gdm                1577  0.0   0.0   870.49MB   19.53MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:01   /usr/libexec/gsd-media-keys
gdm                1538  0.0   0.0   531.81MB   18.51MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   /usr/libexec/gsd-xsettings
gdm                1541  0.0   0.0   539.53MB    18.5MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:04   /usr/libexec/gsd-power
gdm                1570  0.0   0.0    458.5MB    18.4MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   /usr/libexec/gsd-wacom
gdm                1500  0.0   0.0   386.57MB   17.94MB tty1     Sl       Sat Jun 18 01:31:45 2022          00:00:00   /usr/libexec/ibus-x11 --kill-daemon
gdm                1537  0.0   0.0   386.13MB   17.92MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   /usr/libexec/gsd-clipboard

実施例2

やや簡潔なバージョン:

sortbyfield="rss"; fsep="-o zzz:::zzz%% -o"; ps ax o user:16 $fsep pid $fsep pcpu $fsep pmem $fsep vsz $fsep rss $fsep tty $fsep stat $fsep lstart $fsep time:16 $fsep comm  --sort -$sortbyfield | awk 'function setprefix(num){{n_suffix=1; while(num > 1000 && n_suffix < suffixes_len) {num /= 1024; n_suffix++;}; num=int(100*num)/100suffixes[n_suffix]}; return num} BEGIN{suffixes_len=split("kB MB GB TB PB EB ZB",suffixes);FS="zzz:::zzz%";} NR>1 {$5=setprefix($5);$6=setprefix($6); }{ printf "%-16s %6s %-5s %-5s %9s %9s %-8s %-8s %-25s %-18s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11;}' |head -n20 |cut -c -250

出力:(少し整理された例)

USER                PID %CPU  %MEM        VSZ       RSS TT       STAT                      STARTED              TIME   COMMAND
gdm                1474  0.0   0.3     2.87GB  182.86MB tty1     Sl+      Sat Jun 18 01:31:44 2022          00:34:40   gnome-shell
gdm                1370  0.0   0.0    171.3MB   34.31MB tty1     Sl+      Sat Jun 18 01:31:43 2022          00:01:56   Xorg
gdm                1552  0.0   0.0   686.07MB   20.14MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:40   gsd-color
gdm                1577  0.0   0.0   870.49MB   19.53MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:01   gsd-media-keys
gdm                1538  0.0   0.0   531.81MB   18.51MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   gsd-xsettings
gdm                1541  0.0   0.0   539.53MB    18.5MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:04   gsd-power
gdm                1570  0.0   0.0    458.5MB    18.4MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   gsd-wacom
gdm                1500  0.0   0.0   386.57MB   17.94MB tty1     Sl       Sat Jun 18 01:31:45 2022          00:00:00   ibus-x11
gdm                1537  0.0   0.0   386.13MB   17.92MB tty1     Sl+      Sat Jun 18 01:31:46 2022          00:00:00   gsd-clipboard

これが誰かに役立つことを願っています!

関連情報