スクリプト - さまざまな行を切り取り、並べ替えます。

スクリプト - さまざまな行を切り取り、並べ替えます。

CPU使用率に基づいてユーザーのプロセスをソートしたいです。私はこれを試しました

ps aux|tr -s " "|cut -f3 -d " "| sort -| grep "user" > file name

これはうまくいきますか?

答え1

ps出力の列とソート順を指定できます。要件によっては、後処理に追加のコマンドが必要ない場合があります。

次のコマンドは、CPU使用率に基づいてソートされた指定されたユーザーのプロセスのリストを提供します。 (このheadコマンドは出力を制限するためにのみ使用されます。)

[root@testvm ~]# ps -o pid,uname,pcpu,command -u root --sort=-pcpu | head
  PID USER     %CPU COMMAND
    1 root      0.5 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
  664 root      0.4 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
 1226 root      0.2 sshd: root@pts/0
 1261 root      0.2 [kworker/0:0]
    9 root      0.1 [rcu_sched]
   20 root      0.1 [kworker/0:1]
  293 root      0.1 [kworker/0:1H]
  875 root      0.1 -bash
 1008 root      0.1 /usr/bin/python -Es /usr/sbin/tuned -l -P

この-oオプションは、ここでプロセスID、ユーザー名、CPU使用率、およびコマンド列である出力形式を指定します。

この-uオプションは、psプロセスを特定のユーザー(この場合はroot)に制限します。

この--sortオプションは、ソート順をCPU使用率の割合として定義します。プレフィックス-シンボル定義は降順でソートされます。

答え2

最初の検索を特定のユーザーに制限して並べ替えてから切り取ることを検討します。

ps hux -u USER | sort -k3 -n

このアプローチでは、プロセスはすでに特定のユーザーに制限されます。その後、検索プロセス全体に対してソートを実行します。trその後、必要に応じてcut特定のフィールドにパイプすることができます。

パラメーター:
h:suppress ヘッダー
u: ユーザー指向形式
x: BSD tty 要件の削除

-uUSER:プロセスを選択する必要がある特定のユーザー。これはリストです。

答え3

私はそうします:

ps aux | grep user | sort -rk3 > file_name

sort -rk3について読むman sort

あなたについて:

  • file nameスペースは重要です。 bashはそれがファイルかどうかわからず、出力を名前付きファイルにリダイレクトし、ファイル名filenameスペースを追加する必要がある場合は引用符で囲む必要があります。... > "file name"

  • 多くのLinuxアプリケーションは、スペースを計算/縮小せずに列を選択できるほどスマートです。パーセンテージだけが必要な場合は、次のようにします。

    ps aux | grep user | sort -rk3 | awk '{print $3}'

    cutたぶんそれは賢いかもしれませんが、私はそれについてあまり慣れていません。

  • top -bn1 | grep user同様のことをすることを検討することもできます。

関連情報