![终端命令以简单的方式在单个屏幕上显示内存使用情况、温度和 GPU 使用情况的摘要](https://linux22.com/image/1175060/%E7%BB%88%E7%AB%AF%E5%91%BD%E4%BB%A4%E4%BB%A5%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E5%BC%8F%E5%9C%A8%E5%8D%95%E4%B8%AA%E5%B1%8F%E5%B9%95%E4%B8%8A%E6%98%BE%E7%A4%BA%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%E3%80%81%E6%B8%A9%E5%BA%A6%E5%92%8C%20GPU%20%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%E7%9A%84%E6%91%98%E8%A6%81.png)
是否有一个终端命令可以以简单的方式在单个屏幕上显示内存使用情况、温度度数和 GPU 使用情况的摘要?
我希望终端以摘要的方式提供内存使用情况(不是交换等)、GPU 使用情况(百分比)和温度程度的信息 - CPU 有多热?
现在,我必须使用三个不同的终端命令:
watch free -m # For Memory use
watch sensors # For Temperature
watch ndivia-smi # For GPU use
有没有办法在单个屏幕上显示这些信息?这些命令会产生大量信息,但有些人可能并不需要它们。
第一行可能显示内存使用情况。第二行可能显示 GPU 使用情况。第三行可能显示温度。
我想要free -m
“可用”中的温度。我想要nvidia-smi
“Volatile GPU-Util”中的温度,以及sensors
所有温度的百分比,但不显示其限制(从那个到那个),例如
Available memory 5500000
Volatile GPU-Util 20%
CPUtemp1 40oC
Fantemp1 41oC
FanTemp2 42oC
etc...
那可能吗?
示例输出:
free -m
输出
$ free -m
total used free shared buff/cache available
Mem: 7815 1938 3548 188 2328 5391
Swap: 2047 57 1990
nvidia-smi
输出
$ nvidia-smi
Fri Jul 31 18:35:45 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.138 Driver Version: 390.138 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GT 1030 Off | 00000000:01:00.0 On | N/A |
| 32% 44C P8 N/A / 30W | 220MiB / 1998MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1770 G /usr/lib/xorg/Xorg 82MiB |
| 0 8182 G /usr/bin/krunner 6MiB |
| 0 8184 G /usr/bin/plasmashell 55MiB |
| 0 26370 G ...AAAAAAAAAAAACAAAAAAAAAA= --shared-files 74MiB |
+-----------------------------------------------------------------------------+
sensors
输出
$ sensors
it8620-isa-0a30
Adapter: ISA adapter
in0: +0.01 V (min = +0.00 V, max = +3.06 V) ALARM
in1: +2.05 V (min = +0.00 V, max = +3.06 V)
in2: +2.00 V (min = +0.00 V, max = +3.06 V)
in3: +2.02 V (min = +0.00 V, max = +3.06 V)
in4: +0.01 V (min = +0.00 V, max = +3.06 V)
in5: +1.74 V (min = +0.00 V, max = +3.06 V)
in6: +1.50 V (min = +0.00 V, max = +3.06 V)
3VSB: +3.38 V (min = +0.00 V, max = +6.12 V)
Vbat: +3.05 V
fan1: 2986 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
temp1: +47.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: -128.0°C (low = +127.0°C, high = +127.0°C) sensor = disabled
temp3: +35.0°C (low = +127.0°C, high = +127.0°C) sensor = Intel PECI
temp4: +45.0°C
temp5: +42.0°C
temp6: +45.0°C
intrusion0: ALARM
acpitz-virtual-0
Adapter: Virtual device
temp1: +27.8°C (crit = +97.0°C)
temp2: +29.8°C (crit = +97.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +45.0°C (high = +86.0°C, crit = +92.0°C)
Core 0: +43.0°C (high = +86.0°C, crit = +92.0°C)
Core 1: +44.0°C (high = +86.0°C, crit = +92.0°C)
Core 2: +42.0°C (high = +86.0°C, crit = +92.0°C)
Core 3: +40.0°C (high = +86.0°C, crit = +92.0°C)
答案1
您可以使用各种命令行实用程序(例如)轻松地从长输出中提取感兴趣的特定部分awk
。
您只想显示“可用的' 从 的输出中提取内存free -m
。请注意,此数字作为 输出的第 2 行中的第 7 个字符串出现free -m
。因此,您可以使用以下命令提取此数字
free -m | awk '{if (NR == 2) {print $7}}'
要“ watch
”输出,您可以使用以下内容
watch 'free -m | awk '\''{if (NR == 2) {print $7}}'\'
类似地,您似乎想从命令输出中提取第 9 行中的第 2 个字符串nvidia-smi
(32%
根据您添加到问题中的输出)。因此,您可以通过以下命令提取此值
nvidia-smi | awk '{if (NR == 9) {print $2}}'
并且watch
使用
watch 'nvidia-smi | awk '\''{if (NR == 9) {print $2}}'\'
从输出中,sensors
我相信您正尝试从第 15 行到第 20 行(报告temp1
给temp6
)中提取第二个字符串。因此,您可以使用
sensors | awk '{if (NR>=15&&NR<=20) {print $2}}'
并watch
watch 'sensors | awk '\''{if (NR>=15&&NR<=20) {print $2}}'\'
要watch
同时执行这三项操作,您可以使用以下命令
watch 'free -m | awk '\''{if (NR == 2) {print $7}}'\''; nvidia-smi | awk '\''{if (NR == 9) {print $2}}'\''; sensors | awk '\''{if (NR>=15&&NR<=20) {print $2}}'\'