实用脚本用以输出当前所有用户的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
: 表示依据数值大小排序,而非字典序。