0

我在我的 Linux 上经常使用屏幕。我想稍微改变一下 hardstatus 行。我想将 CPU 和内存使用信息添加到该行,但我不知道如何。在 Google 中进行一些搜索后,我只能找到 %l 选项来添加系统负载。

我的行(被复制)如下所示:

hardstatus alwayslastline '%{= G}[ %{G}%H %{g}][%= %{= w}%?%-Lw%?%{= R}%n*%f %t%?%{= R}(%u)%?%{= w}%+Lw%?%= %{= g}][ %{y}Load: %l %{g}][%{B}%D %d-%    M-%Y %{W}%C:%s %A %{g}]'

我的屏幕 hardstatus 行是这样的: 在此处输入图像描述

现在定义广告负载的三个数字是多少?以及如何将它们更改为类似CPU load 28% Mem Load 43%或类似的东西?

4

3 回答 3

3

为了简短起见:

这三个数字分别代表最后一分钟、5 分钟和 15 分钟的平均 CPU 负载,其中 0 表示 0% 负载,1.0 表示 100% 负载。

看看这个对 cpu 负载的出色解释

对于第二个问题,我不确定您是否可以在屏幕的 hardstatus 行中仅用一个数字来表示系统负载(我不这么认为),但我希望我的回答能有所帮助;-) *Jost

于 2013-08-26T07:57:19.930 回答
1

如果从那时起您还没有听说过 screen 命令backtick,这可能是您最喜欢的 ( http://aperiodic.net/screen/commands:backtick )。

例如,您可以定义一系列 linux($BASH 或 sh)命令,这些命令在命令中回显您自己计算的负载值和自己计算的内存使用值backtick

在此示例中,假设您只想显示由“正常运行时间”(5 分钟统计)给出的“平均负载”统计的第二个值。

第 1 步:如果您的“正常运行时间”输出如下所示(行首有一个空格,“平均负载:”之前有 2 个空格)...

 17:04:06 up 3 days, 21:52, 12 users,  load average: 0.36, 0.27, 0.21

...您可以像这样将您的值提取到变量 cpuLoad 中(并去掉尾随的“逗号”):

cpuLoad=$(cut -s -d\  -f13 <(uptime))
cpuLoad=${cpuLoad:0:-1}

第 2 步:类似地,您可以从“free”命令的输出中提取内存值,并进行一些在这篇精彩文章中解释的计算,这些计算最终会生成一个名为 memLoad 的变量(此处缩写为“memLoad=...”)。

第 3 步:将所有内容放在一起,并按照您希望的方式回显您的输出:

backtick 1 5 5 /bin/bash -c 'cpuLoad=$(cut -s -d\  -f13 <(uptime)); cpuLoad=${cpuLoad:0:-1}; memLoad=...; echo "CPU load ${cpuLoad} Mem Load ${memLoad}" '

这将每 5 秒更新一次 hardstatus 或标题状态行中的值,使用“hardstatus 字符串”定义中的转义序列“%1`”。

对于更多计算,您将需要更多空间,这些空间必须全部在一行上。所以把它放在一个shell函数中,然后从你的screenrc文件中调用这个函数:

backtick 1 5 5 /bin/bash -c '_mySystemLoadScreenFunction'

对我也不起作用的是使用 $BASH 而不是完整路径。这不起作用:

backtick 1 5 5 $BASH -c '_mySystemLoadScreenFunction'

希望这可以帮助。非常感谢您的关注。

于 2021-04-17T17:34:49.680 回答
0

为了扩展@richard-gantz 的答案,这是我的解决方案,也可以从中提取内存使用情况free

backtick 1 1 1 /bin/bash -c 'cpuLoad=$(cut -s -d\  -f16 <(uptime)); cpuLoad=${cpuLoad:0:-1}; memLoad=$(free -g | grep Mem | awk '\''{print $3"/"$2" GB"}'\''); echo "CPU: ${cpuLoad} Mem: ${memLoad}" '

# Display the status line at the bottom
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.kW}%-w%{.bW}%t [%n]%{-}%+w %= %{..R} %1` %{..G} %H %{..Y} %Y/%m/%d %c"

我使用了他的 cpuLoad 解决方案,cut但无法使用cut来自 的多行输出free,因此使用grepand的解决方案awk。我在这里发布它,因为我花了一些时间解决这个问题,所以它可能对某人有帮助。

内存使用量used_mem / total_mem以 GB 为单位。

于 2021-08-27T14:14:06.013 回答