如何在 Linux 上获取一行中打印出来的 CPU 使用率和 RAM 百分比?(使用 cli)
我必须将这些输出字符串传递到 LCD 显示器。
多谢
答案1
使用 AWK 解析 Top 的输出
top -bn1 | awk '/Mem/ { mem = "Memory in Use: " $5 / $3 * 100 "%" };
/Cpu/ { cpu = "CPU in Use: " 100 - $8 "%" };
END { print mem ", " cpu }'
这将使用 top 的批处理模式打印一次统计信息,然后您可以使用 awk 以任何您喜欢的方式解析它。例如,上面的代码在我的测试中产生了以下内容:
内存使用率:93.866%,CPU 使用率:1.7%
显然,您的输出会有所不同。如果您需要更多(或更少)信息,您还可以调整输出格式。
答案2
您可以解析某些 Unix 实用程序的输出,例如vmstat
:
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 75812 282632 115704 891332 0 1 22 54 138 362 15 2 80 2
$ vmstat | sed -n '3s/ \+/\t/gp' | cut -f5,14
280904 15
上面打印了可用内存和 CPU 使用率。
如果你想用过的内存,您可以使用另一个实用程序,例如top
批处理模式,正如 CodeGnome 和我所建议的那样先前的答案。
$ top -bn1 | sed -rn '3s/[^0-9]* ([0-9\.]+) .*/\1/p;4s/.*, ([0-9]+) .*/\1/p' | tr '\n' ' '
10.4 3787340
或者获取百分比, 你可以做
$ top -bn1 | \
> sed -rn '3s/[^0-9]* ([0-9\.]+) .*/\1/p;4s/[^0-9]*([0-9]+)[^0-9]+([0-9]+) .*/\1 \2/p' | \
> { read cpu; read tot used; echo $cpu $(( 100*used/tot )); }
10.3 94
但我确信还有更优雅的解决方案。