如何对Linux ps命令输出进行排序

系统 Linux
ps命令是理解Linux系统上运行的内容和每个进程使用的资源的关键。了解如何显示ps以任何方式提供的信息都是非常有用的,这些信息可以帮助您集中精力解决您要解决的问题。

ps命令是理解Linux系统上运行的内容和每个进程使用的资源的关键。了解如何显示ps以任何方式提供的信息都是非常有用的,这些信息可以帮助您集中精力解决您要解决的问题。这样做的一个方面是能够按任何列对ps aux命令的输出进行排序,以突出显示特定的信息,例如进程使用了多少内存或运行了多长时间。

技巧包括使用ps命令的 --sort 选项并知道如何指定要用于排序的列。默认情况下,ps按进程id(PID)排序,首先显示最小的。PID 1将出现在列表的顶部,在列标题的正下方。其余的将按数字顺序排列。

下面是一个标准ps-aux输出的例子。可能看起来很眼熟。

 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ps aux | head -5  
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND  
  3. root 1 0.0 0.4 171788 16056 ? Ss 08:59 0:05 /sbin/init splash  
  4. root 2 0.0 0.0 0 0 ? S 08:59 0:00 [kthreadd]  
  5. root 3 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_gp]  
  6. root 4 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_par_gp] 

 

 使用--sort选项,如果按PID排序,您将得到相同的输出。注意,您需要输入小写的“pid”。但是,您可以将“pid”更改为任何其他列并按该列排序。

 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ps aux --sort pid | head -5  
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND  
  3. root 1 0.0 0.4 171788 16056 ? Ss 08:59 0:05 /sbin/init splash  
  4. root 2 0.0 0.0 0 0 ? S 08:59 0:00 [kthreadd]  
  5. root 3 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_gp]  
  6. root 4 0.0 0.0 0 0 ? I< 08:59 0:00 [rcu_par_gp] 

 

要查看首先列出的选定列的最大值,必须更改排序选项(例如,用-pid代替pid)。请注意,在这种情况下,显示如何以最高的进程ID开始。将-看作是降序值(最大值在前),而名称(例如pid)或带有加号的名称(例如+pid)表示升序。下面显示的命令按进程ID排序,首先显示最大的。

 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ps aux --sort -pid | head -5  
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND  
  3. linuxmi 38579 0.0 0.0 11368 596 pts/2 S+ 13:33 0:00 head -5  
  4. linuxmi 38578 0.0 0.0 15124 3788 pts/2 R+ 13:33 0:00 ps aux --sort -pid  
  5. linuxmi 38571 0.2 0.1 13960 5240 pts/2 Ss 13:32 0:00 bash  
  6. root 38546 0.0 0.0 0 0 ? I 13:32 0:00 [kworker/0:3] 

 

要按其他列排序,您需要使用其列名。在此示例中,“ pmem”表示内存使用的百分比,使用“ -pmem”表示我们将首先查看使用最多内存的进程。您也可以使用“%mem”和“-%mem”。

 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ps aux --sort -pmem | head -5  
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND  
  3. mysql 1559 0.2 8.9 1282972 357304 ? Ssl 08:59 0:34 /usr/sbin/mysqld  
  4. linuxmi 23618 0.1 8.4 3424800 338068 ? Ssl 09:29 0:28 /usr/bin/gnome-shell  
  5. linuxmi 25474 0.0 7.1 971780 286636 ? Sl 09:30 0:07 /usr/bin/gnome-software --gapplication-service  
  6. linuxmi 23920 0.0 5.7 1143616 228824 ? Sl 09:29 0:08 /snap/snap-store/467/usr/bin/snap-store --gapplication-service 

 

如果只想查看ps输出的选择列,则可以在此示例中进行指定,其中仅显示命令及其CPU使用率,并按最大CPU使用率对输出进行排序。

 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ps -eo comm,pcpu --sort -pcpu | head -5  
  2. COMMAND %CPU  
  3. tracker-extract 4.6  
  4. systemd-hostnam 1.8  
  5. netdata 1.7  
  6. apps.plugin 1.7 

以下是列名称和字符串的列表,可用于对它们进行排序: 

  1. Column    Ascending Descending  
  2. Heading   Sort      Sort       Alternatives  
  3. ===============================================  
  4. USER      user      -user  
  5. PID       pid       -pid  
  6. %CPU      pcpu      -pcpu      %cpu and -%cpu  
  7. %MEM      pmem      -pmem      %pmem and -%pmem  
  8. VSZ       vsz       -vsz  
  9. RSS       rss       -rss  
  10. TTY       tty       -tty  
  11. STAT      stat      -stat  
  12. START     start     -start  
  13. TIME      time      -time  
  14. COMMAND   comm      -comm 

使用sort命令

您还可以将ps aux命令的输出通过管道传输到sort命令,并使用列号(1到11)选择要用于排序的列。这种方法有两个缺点:1)列标题将与ps输出的其余部分一起排序,可能会在您不希望看到的地方结束;2)当排序需要数值时,您需要在sort命令中添加一个“n”。ps命令理解这种区别;像这样的命令会根据内存使用情况进行排序。sort命令使用"-nk 4"对排序输出中的(-k 4) 4th数据列进行数字排序。

 

  1. linuxmi@linuxmi:~/www.linuxmi.com$ ps aux | head -1; ps aux | sort -r -nk 4 | head -3  
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND  
  3. mysql 1559 0.2 8.9 1282972 357304 ? Ssl 08:59 0:35 /usr/sbin/mysqld  
  4. linuxmi 23618 0.2 8.6 3432704 346044 ? Ssl 09:29 0:38 /usr/bin/gnome-shell  
  5. linuxmi 25474 0.0 7.1 971780 286636 ? Sl 09:30 0:07 /usr/bin/gnome-software --gapplication-service 

 

使用别名

即使ps命令的灵活性可以满足您的需求,您也可以始终创建别名,这样就不必计数列和/或考虑列值是否为数字。这里有些例子:

 

  1. alias LmCPU='ps aux --sort -%cpu'  
  2. alias LmMem='ps aux --sort -%mem'  
  3. alias TopCPU='ps aux --sort -%cpu | head -11'  
  4. alias TopMem='ps aux --sort -%mem | head -11' 

 

总结

ps命令使按任何数据列对输出进行排序变得相当容易。了解关于 --sort 选项和如何使用它的更多信息,以及如何将ps输出传递给sort命令。 

 

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2016-12-01 15:43:41

Linuxls命令

2021-09-02 22:52:16

ValueDictionary排序

2022-11-11 14:48:41

内存top命令

2010-06-24 14:24:39

Linux Cat命令

2021-11-08 10:58:08

变量依赖图排序

2010-06-23 14:28:23

LINUX Bash

2010-06-13 15:13:45

Linux 查看进程

2010-06-11 16:57:37

Linux 查看进程

2009-10-27 16:14:11

linux进程查看

2011-08-22 14:38:40

linux服务器分区

2020-07-07 13:00:00

Linux压力测试

2024-01-25 18:13:23

LinuxLVM工具

2023-06-06 16:10:11

2017-09-04 09:38:49

Linux开机启动项清理

2010-01-22 10:54:45

Linux操作系统PS命令

2009-12-25 10:48:23

ps -aux

2012-05-04 09:24:02

Linuxps命令

2010-07-21 10:36:18

SQL Server

2015-12-14 16:03:45

LinuxUnix端口扫描

2010-05-26 18:43:42

SVN库
点赞
收藏

51CTO技术栈公众号