從 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 發行版和版本而異。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP