從 Linux 的 ps 結果中排除 grep


Linux 中的 ps 命令用於顯示系統上正在執行的程序的資訊。它提供了一個當前程序的快照,包括程序 ID (PID)、擁有該程序的使用者、CPU 和記憶體使用率百分比以及啟動該程序的命令。預設情況下,ps 僅顯示與 ps 命令相同終端會話中執行的程序的資訊。但是,使用各種選項和命令列引數,您可以自定義輸出以顯示系統上所有正在執行的程序的資訊,甚至遠端顯示。

列出所有程序

要使用 ps 命令列出 Linux 或類 Unix 系統上所有正在執行的程序,您可以使用以下命令選項和引數之一 -

  • ps aux - 此命令顯示系統上所有正在執行的程序,包括其他使用者擁有的程序。a 選項顯示所有使用者程序,u 選項顯示有關執行程序的使用者詳細資訊,x 選項顯示沒有控制終端的程序。

  • ps -e 或 ps -ef - 此命令顯示系統上的所有程序,包括沒有控制終端的程序。e 選項顯示所有程序,f 選項顯示完整格式列表,包括程序的父子關係。

  • ps -A - 此命令顯示所有正在執行的程序,包括那些沒有控制終端的程序。

  • ps -eLf - 它以樹狀格式顯示所有程序,顯示父子關係以及程序的執行緒。

示例

以下是在 Linux 系統上使用 ps aux 命令列出所有正在執行的程序的示例 -

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  21644  4100 ?        Ss   Jan11   0:08 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Jan11   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Jan11   0:00  [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    Jan11   0:00  [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S    Jan11   0:00  [kworker/0:0H]
...

此命令輸出顯示每個程序的以下資訊 -

  • USER - 擁有該程序的使用者

  • PID - 程序 ID

  • %CPU - CPU 使用率百分比

  • %MEM - 記憶體使用率百分比

  • VSZ - 虛擬記憶體大小

  • RSS - 常駐集大小

  • TTY - 與程序關聯的終端

  • STAT - 程序狀態

  • START - 程序啟動時間

  • TIME - 程序消耗的總 CPU 時間

  • COMMAND - 啟動該程序的命令

查詢特定程序

您可以將 ps 命令與其他命令(如 grep 或 awk)結合使用以搜尋特定程序。以下是如何使用 ps 命令搜尋特定程序並僅顯示相關資訊的示例 -

$ ps aux | grep ssh
root      1027  0.0  0.1  47320  3304 ?        Ss   Jan11   0:00 /usr/sbin/sshd -D

此命令使用 ps aux 命令列出所有正在執行的程序,並將輸出透過管道傳輸到 grep ssh,該命令過濾輸出以僅顯示包含字串“ssh”的行。在此示例中,輸出顯示 ssh 守護程序正在執行,並且 pid 為 1027

另一種查詢特定程序的方法是 -

$ ps -ef | grep ssh
root     1027     1  0 Jan11 ?        00:00:00 /usr/sbin/sshd -D

此命令使用 ps -ef 命令列出所有正在執行的程序,並將輸出透過管道傳輸到 grep ssh,該命令過濾輸出以僅顯示包含字串“ssh”的行。在此示例中,輸出顯示 ssh 守護程序正在執行,pid 為 1027,父 pid 為 1,以及其他詳細資訊。

您還可以使用 pgrep 命令查詢要查詢的程序的 pid,方法是執行

$ pgrep -fl ssh
1027 /usr/sbin/sshd -D

pgrep 帶有一個 -f 選項,該選項與整個命令列匹配。以及 -l 選項以顯示命令的名稱

排除 grep

如果要列出所有程序並過濾掉包含特定字串的程序,則可以使用 ps 命令與 grep -v 一起排除要過濾掉的字串。

例如,要從輸出中排除所有包含字串“grep”的程序 -

$ ps aux | grep -v grep

此命令將顯示除命令列中包含字串 grep 的程序之外的所有程序。

以下是另一種僅使用 ps 命令的方法 -

$ ps aux --not-heading | awk '!/grep/ { print $0 }'

此命令將顯示除命令列中包含字串 grep 的程序之外的所有程序,使用 --not-heading 選項將排除標題,並且 awk 與 ! 和 /grep/ 模式匹配不包含字串“grep”的行並列印它們。

您可以將 grep 替換為您想要從輸出中排除的任何字串。

建立排除 grep 本身的 grep 表示式

如果要使用 grep 命令過濾掉包含特定字串的程序,但也要從輸出中排除 grep 命令本身,則可以使用 -v 選項反轉匹配以及 -w 選項僅匹配整個單詞 -

$ ps aux | grep -w -v grep

此命令使用 ps aux 列出所有正在執行的程序,並將輸出透過管道傳輸到 grep -w -v grep,該命令過濾輸出以排除任何包含精確字串“grep”的行,並且僅匹配整個單詞。

另一種實現此目的的方法是使用 awk 命令

$ ps aux | awk '$11 !~ /grep$/ {print}'

此命令使用 ps aux 列出所有正在執行的程序,並將輸出透過管道傳輸到 awk 命令,該命令過濾輸出以排除命令欄位末尾包含精確字串“grep”的任何行。$11 是命令欄位的欄位號,!~ 是正則表示式匹配否定。

結論

總之,ps 命令是用於列出和監視 Linux 或類 Unix 系統上執行的程序的有用工具。您可以使用 ps 命令的各種命令選項和引數來顯示有關所有正在執行的程序的資訊,或過濾輸出以僅顯示特定程序。此外,您可以使用其他命令(如 grep、awk、pgrep)來過濾輸出。您還可以使用 grep 以及 -v 選項和 -w 選項從輸出中排除特定程序,以及使用正則表示式的 awk 來匹配字串的否定。請記住,ps 命令的輸出格式和選項可能因不同的 Linux 發行版和版本而異。

更新於: 2023年1月24日

2K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.