Command-Line
刪除輸入中前 N 行的命令
背景
我正在執行一個 SSH 伺服器,並且有我想要刪除的這個使用者。我無法刪除此使用者,因為他目前正在執行一些我需要先終止的程序。
這是我目前使用的管道,用於找出我目前使用的使用者的所有程序 ID:
ps -u user | awk '{print $1;}'
輸出如下所示:
PID 2121 2122 2124 2125 2369 2370
我想通過管道
kill -9
來殺死所有程序,這樣我就可以像這樣刪除這個愚蠢的使用者:ps -u user | awk '{print $1;}' | sudo xargs kill -9
但這不起作用,因為
PID
標題:kill: failed to parse argument: 'PID'
問題
我在想必須有一個簡單的 Unix 命令來刪除第一行輸入。
我知道我可以使用
tail
它,但我不想計算輸入包含多少行來確定我想要顯示多少行。我正在尋找類似
head
或tail
倒置的東西(而不是只顯示流的第一個/最後一部分,它顯示除了流的開始/結束之外的所有內容)。筆記
我設法通過簡單地在命令
| grep [[:digit:]]
後添加來解決這個問題,awk
但我仍在尋找一種方法來刪除文件的第一行,因為我認為在其他情況下會非常有用。
注意:如果您的系統已經有
pgrep
/pkill
那麼您在這裡重新發明輪子。如果您的系統沒有這些實用程序,那麼您應該能夠格式化輸出ps
以直接獲取未佔用的 PID 列表,例如ps -u user -opid=
如果您已經在使用
awk
,則無需通過額外的流程來刪除第一行(記錄):只需在記錄號上添加一個條件NR
ps -u user | awk 'NR>1{print $1;}'
既然您提到
head
andtail
,在這種情況下您可能想要的公式是tail -n +2