Linux
查找所有擁有 N 個以上程序的使用者,並在 shell 中回顯它們
我正在用 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