Linux

查找所有擁有 N 個以上程序的使用者,並在 shell 中回顯它們

  • March 19, 2013

我正在用 ksh 編寫腳本。我需要找到所有擁有 N 個以上程序的使用者並在 shell 中回顯它們。N 從 ksh 中讀取。

我知道我應該使用ps -elf,但是如何解析它,找到具有 >N 個程序的使用者,並用它們創建一個數組?我在使用 ksh 中的數組時遇到了一些問題。也許一個簡單的解決方案可以幫助我,而不必創建一個數組。一個人推薦我使用

ps -elf | awk '{a[$3]++;}END{for(i in a)if (a[i]>N)print i, a[i];}' N=3

但它不能正常工作。

您應該將列輸出減少ps到最低限度,即僅在此處請求使用者名 - 這簡化了進一步的處理。

例如:

$ ps -eo user=

將列印所有目前正在執行的程序的所有者(=抑制標題)。

獲取每個使用者計數的簡單方法:

$ ps -eo user= | sort | uniq -c
 1 dovecot
 1 messagebus
 1 mpd
 1 polkitd
 2 postfix
121 root
27 me

然後,您可以根據需要過濾它:

$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root

在變數中有限制:

$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root

引用自:https://unix.stackexchange.com/questions/68449