实用脚本用以输出当前所有用户的CPU使用率

#!/bin/bash

echo "User             Cpu Usage (%)"
echo "------------------------------"

ps -eo user,%cpu,comm,maj_flt,rss | awk '
	NR > 1 {
		cpu[$1] += $2
	}
	END {
		for (user in cpu) {
			printf("%-16s %.2f\n", user, cpu[user])
		}
	}
' | sort -k2 -rn

这段 Bash 脚本用于显示所有用户的总 CPU 使用率,并按照 CPU 使用率降序排列。

  • ps -eo user,%cpu,comm,maj_flt,rss: 使用 ps 命令以特定格式输出当前系统进程的信息,包括用户名称、CPU使用率、命令名称、主要错误页(未在物理内存中找到的页访问数)、RSS(常驻集大小)。
    • -e: 显示所有进程。
    • -o: 自定义输出格式,后面跟随的字段指定要显示的信息。
    • user: 显示进程的所有者,即哪个用户启动了该进程。
    • %cpu: 显示进程的 CPU 使用率,表示该进程使用的 CPU 时间占总 CPU 时间的百分比。
    • comm: 显示进程的命令名称,即启动该进程的可执行文件的名称。
    • maj_flt: 显示进程的主缺页错误次数(Major Faults)。主缺页错误是指进程访问的内存页不在物理内存中,需要从磁盘中加载。
    • rss: 显示进程的驻留集大小(Resident Set Size),单位为千字节(KB),表示该进程当前在物理内存中占用的内存量。

示例输出

USER       %CPU COMMAND         MAJ_FLT   RSS
root       0.0  systemd         123       10240
user1      0.2  bash            45        2048
user2      0.1  python          67        4096
  • awk
    • NR > 1: 跳过第一行(标题行)。
    • cpu[$1] += $2: 将以用户名为键($1),累加 CPU 使用率($2)作为值的数组中对应项累加。这样每个用户的CPU使用率总和都会被计算。
    • 在 END 代码块,遍历之前构建的 cpu 数组,并打印每个用户和他们的总 CPU 使用率。使用 printf 格式化输出,保证用户名左对齐并占据 16 个字符的宽度,CPU 使用率保留两位小数。
  • sort -k2 -rn: 将 awk 的输出通过管道传递给sort命令,按照第二列(CPU使用率)进行降序排序。
    • -k2: 指定排序依据为第二列数据。
    • -r: 表示逆序(降序)
    • -n: 表示依据数值大小排序,而非字典序。