如果我發現有兩個用戶登錄到系統中(UserA和UserB),那麼我該如何找出這兩個用戶運行的進程。但是,這裏的訣竅是腳本將在沒有任何鍵盤輸入的情況下在無人蔘與的批處理中運行。除了被調用。使用unix腳本來獲取用戶運行的進程
我知道腳本的第一部分是 誰| AWK「{打印$ 1}」 這個輸出是 用戶A 用戶B
我想知道的是,我該如何使用這個輸出,並與一些ps命令自動推它,並獲得所需的結果。
如果我發現有兩個用戶登錄到系統中(UserA和UserB),那麼我該如何找出這兩個用戶運行的進程。但是,這裏的訣竅是腳本將在沒有任何鍵盤輸入的情況下在無人蔘與的批處理中運行。除了被調用。使用unix腳本來獲取用戶運行的進程
我知道腳本的第一部分是 誰| AWK「{打印$ 1}」 這個輸出是 用戶A 用戶B
我想知道的是,我該如何使用這個輸出,並與一些ps命令自動推它,並獲得所需的結果。
我終於找到了我正在尋找的單線程,在其他答案的幫助下(更新了,如果沒有用戶登錄 - 看評論)。
ps -fU "`who | cut -d' ' -f1 | uniq | xargs echo`" 2> /dev/null
反引號內的東西被執行,並被「插入現場」。其工作原理如下:
who : you know what that does
cut -d' ' : split strings into fields, using ' ' as separator
-f1 : and return only field 1
uniq : return only unique entries
xargs echo : take each of the values piped in, and send them through echo: this strips the \n
2> /dev/null : if there are any error messages (sent to 2: stderr)
: redirect those to /dev/null - i.e. "dump them, never to be seen again"
的所有輸出是
user1 user2 user3
...然而,許多有。而你再打電話ps
與-fU
標誌,要求這些用戶的所有過程全格式(當然你也可以改變這些標誌來得到你想要的格式,只是不停地在那裏-U
只是事情之前在「``」
ps -fU user1 user2 user3
不知道如果我正確理解你的問題,但你可以管PS的通過grep的輸出獲得的過程由特定用戶運行的,就像這樣:
ps -ef | grep '^xxxxx '
其中xxxxx是用戶。
如何在沒有我輸入當前登錄人員的用戶ID的情況下自動執行此操作。因此,who命令應該自動轉到ps命令並提供所需的結果。我該怎麼做? ? – anansharm
獲取用戶(使用誰)的列表,保存到一個文件,然後列出所有的進程,和grep那(使用您剛剛創建的文件),
tempfile=/tmp/wholist.$$
who | cut -f1 -d' '|sort -u > $tempfile
ps -ef |grep -f $tempfile
rm $tempfile
LOGGED_IN=$(who | awk '{print $1}' | sort -u | xargs echo)
[ "$LOGGED_IN" ] && ps -fU "$LOGGED_IN"
的standard switch -U
將限制輸出到只有那些真實用戶ID對應於任何給定的參數的進程。 (例如,ps -f -U「UserA UserB」)。
你的回答激發了我對於我提出的單線 - 「只是因爲我不得不」。謝謝。 – Floris
你有沒有在使用'ps'命令來做到這一點? – chepner
不,我不知道如何把出了誰命令ps命令來獲得由目前的用戶運行的進程失敗的嘗試登錄。 – anansharm