如何對(duì)Linux ps命令輸出進(jìn)行排序
ps命令是理解Linux系統(tǒng)上運(yùn)行的內(nèi)容和每個(gè)進(jìn)程使用的資源的關(guān)鍵。了解如何顯示ps以任何方式提供的信息都是非常有用的,這些信息可以幫助您集中精力解決您要解決的問題。這樣做的一個(gè)方面是能夠按任何列對(duì)ps aux命令的輸出進(jìn)行排序,以突出顯示特定的信息,例如進(jìn)程使用了多少內(nèi)存或運(yùn)行了多長(zhǎng)時(shí)間。
技巧包括使用ps命令的 --sort 選項(xiàng)并知道如何指定要用于排序的列。默認(rèn)情況下,ps按進(jìn)程id(PID)排序,首先顯示最小的。PID 1將出現(xiàn)在列表的頂部,在列標(biāo)題的正下方。其余的將按數(shù)字順序排列。
下面是一個(gè)標(biāo)準(zhǔn)ps-aux輸出的例子??赡芸雌饋?lái)很眼熟。
- linuxmi@linuxmi:~/www.linuxmi.com$ ps aux | head -5
 - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 - root 1 0.0 0.4 171788 16056 ? Ss 08:59 0:05 /sbin/init splash
 - root 2 0.0 0.0 0 0 ? S 08:59 0:00 [kthreadd]
 - root 3 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_gp]
 - root 4 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_par_gp]
 
使用--sort選項(xiàng),如果按PID排序,您將得到相同的輸出。注意,您需要輸入小寫的“pid”。但是,您可以將“pid”更改為任何其他列并按該列排序。
- linuxmi@linuxmi:~/www.linuxmi.com$ ps aux --sort pid | head -5
 - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 - root 1 0.0 0.4 171788 16056 ? Ss 08:59 0:05 /sbin/init splash
 - root 2 0.0 0.0 0 0 ? S 08:59 0:00 [kthreadd]
 - root 3 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_gp]
 - root 4 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_par_gp]
 
要查看首先列出的選定列的最大值,必須更改排序選項(xiàng)(例如,用-pid代替pid)。請(qǐng)注意,在這種情況下,顯示如何以最高的進(jìn)程ID開始。將-看作是降序值(最大值在前),而名稱(例如pid)或帶有加號(hào)的名稱(例如+pid)表示升序。下面顯示的命令按進(jìn)程ID排序,首先顯示最大的。
- linuxmi@linuxmi:~/www.linuxmi.com$ ps aux --sort -pid | head -5
 - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 - linuxmi 38579 0.0 0.0 11368 596 pts/2 S+ 13:33 0:00 head -5
 - linuxmi 38578 0.0 0.0 15124 3788 pts/2 R+ 13:33 0:00 ps aux --sort -pid
 - linuxmi 38571 0.2 0.1 13960 5240 pts/2 Ss 13:32 0:00 bash
 - root 38546 0.0 0.0 0 0 ? I 13:32 0:00 [kworker/0:3]
 
要按其他列排序,您需要使用其列名。在此示例中,“ pmem”表示內(nèi)存使用的百分比,使用“ -pmem”表示我們將首先查看使用最多內(nèi)存的進(jìn)程。您也可以使用“%mem”和“-%mem”。
- linuxmi@linuxmi:~/www.linuxmi.com$ ps aux --sort -pmem | head -5
 - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 - mysql 1559 0.2 8.9 1282972 357304 ? Ssl 08:59 0:34 /usr/sbin/mysqld
 - linuxmi 23618 0.1 8.4 3424800 338068 ? Ssl 09:29 0:28 /usr/bin/gnome-shell
 - linuxmi 25474 0.0 7.1 971780 286636 ? Sl 09:30 0:07 /usr/bin/gnome-software --gapplication-service
 - linuxmi 23920 0.0 5.7 1143616 228824 ? Sl 09:29 0:08 /snap/snap-store/467/usr/bin/snap-store --gapplication-service
 
如果只想查看ps輸出的選擇列,則可以在此示例中進(jìn)行指定,其中僅顯示命令及其CPU使用率,并按最大CPU使用率對(duì)輸出進(jìn)行排序。
- linuxmi@linuxmi:~/www.linuxmi.com$ ps -eo comm,pcpu --sort -pcpu | head -5
 - COMMAND %CPU
 - tracker-extract 4.6
 - systemd-hostnam 1.8
 - netdata 1.7
 - apps.plugin 1.7
 
以下是列名稱和字符串的列表,可用于對(duì)它們進(jìn)行排序:
- Column Ascending Descending
 - Heading Sort Sort Alternatives
 - ===============================================
 - USER user -user
 - PID pid -pid
 - %CPU pcpu -pcpu %cpu and -%cpu
 - %MEM pmem -pmem %pmem and -%pmem
 - VSZ vsz -vsz
 - RSS rss -rss
 - TTY tty -tty
 - STAT stat -stat
 - START start -start
 - TIME time -time
 - COMMAND comm -comm
 
使用sort命令
您還可以將ps aux命令的輸出通過管道傳輸?shù)絪ort命令,并使用列號(hào)(1到11)選擇要用于排序的列。這種方法有兩個(gè)缺點(diǎn):1)列標(biāo)題將與ps輸出的其余部分一起排序,可能會(huì)在您不希望看到的地方結(jié)束;2)當(dāng)排序需要數(shù)值時(shí),您需要在sort命令中添加一個(gè)“n”。ps命令理解這種區(qū)別;像這樣的命令會(huì)根據(jù)內(nèi)存使用情況進(jìn)行排序。sort命令使用"-nk 4"對(duì)排序輸出中的(-k 4) 4th數(shù)據(jù)列進(jìn)行數(shù)字排序。
- linuxmi@linuxmi:~/www.linuxmi.com$ ps aux | head -1; ps aux | sort -r -nk 4 | head -3
 - USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 - mysql 1559 0.2 8.9 1282972 357304 ? Ssl 08:59 0:35 /usr/sbin/mysqld
 - linuxmi 23618 0.2 8.6 3432704 346044 ? Ssl 09:29 0:38 /usr/bin/gnome-shell
 - linuxmi 25474 0.0 7.1 971780 286636 ? Sl 09:30 0:07 /usr/bin/gnome-software --gapplication-service
 
使用別名
即使ps命令的靈活性可以滿足您的需求,您也可以始終創(chuàng)建別名,這樣就不必計(jì)數(shù)列和/或考慮列值是否為數(shù)字。這里有些例子:
- alias LmCPU='ps aux --sort -%cpu'
 - alias LmMem='ps aux --sort -%mem'
 - alias TopCPU='ps aux --sort -%cpu | head -11'
 - alias TopMem='ps aux --sort -%mem | head -11'
 
總結(jié)
ps命令使按任何數(shù)據(jù)列對(duì)輸出進(jìn)行排序變得相當(dāng)容易。了解關(guān)于 --sort 選項(xiàng)和如何使用它的更多信息,以及如何將ps輸出傳遞給sort命令。






















 
 
 




 
 
 
 