668 字
3 分钟
Linux 获取状态信息
2022-01-28

获取每个CPU占用率#

命令#

a时刻运行

cat /proc/stat | grep cpu

类似如下输出

cpu  79076 58 18232 14519593 5104 0 1275 0 0 0
cpu0 42156 31 9460 7258476 2980 0 666 0 0 0
cpu1 36920 27 8772 7261116 2124 0 609 0 0 0

b时刻再次运行,如下输出

cpu  80076 68 19232 14529593 6104 0 1375 0 0 0
cpu0 43156 41 10460 7268476 3980 0 766 0 0 0
cpu1 37920 37 9772 7271116 3124 0 709 0 0 0

解释#

第一行是总的(所有核心)信息,除第一行,其他行是单个核心的信息。
第一列,是CPU的ID。cpu0就是第0个CPU。随后每一列分别是user、sys、nice、idle,iowait、irq、softirq的数值,可以计算获得占用率。

计算#

例如:求a至b时刻间,cpu0的user占用率

a时刻#

user(a, cpu0)   =   42156
total(a, cpu0)  =   user(a) + sys(a) + nice(a) + idle(a) + iowait(a) + irq(a) + softirq(a)
                =   42156+31+9460+7258476+2980+0+666
                =   7313769

b时刻#

user(b, cpu0)   =   43156
total(b, cpu0)  =   user(a) + sys(a) + nice(a) + idle(a) + iowait(a) + irq(a) + softirq(a)
                =   43156+41+10460+7268476+3980+0+766
                =   7326879

结果#

user(b-a, cpu0) =   [user(b, cpu0) - user(a, cpu0)] / [total(b, cpu0) - total(b, cpu0)]
                =   (43156 - 42156) / (7326879 - 7313769)
                =   1000 / 13110 
                =   7.62%

获取网速#

命令#

运行cat /proc/net/dev,会输出类似如下的结果

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 62626508  187194    0    0    0     0          0         0 62626508  187194    0    0    0     0       0          0
  eth0: 755077911  850858    0    0    0     0          0         0 62014432  411931    0    0    0     0       0          0
tailscale0: 4271238    5215    0    0    0     0          0         0   389131    4284    0    0    0     0       0          0

解释#

第一行指接口|接收|发送
第二行指具体的类型,是bytes还是packets

前两行以下的每一行:
最左边是每个network interface的名称。lo代表127.0.0.1,即localhosteth0是网卡1,tailscale是一个虚拟网卡。
随后就是字节、包的数量等。

计算方法#

例:在时间a秒时,获取到lo的数据,receive部分bytes值为c,b秒时lo的receive部分bytes值为d,则
lo的网速=(d-c)/(b-a),单位bytes/s

获取发行版#

cat /etc/os-release | grep PRETTY_NAME

类似输出:

PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"

获取CPU温度#

paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'

如果类似以下输出,则无法获取

zsh: no matches found: /sys/class/thermal/thermal_zone*/temp
zsh: no matches found: /sys/class/thermal/thermal_zone*/type

成功的话,会获取类似如下输出

x86_pkg_temp  47.0??C
x86_pkg_temp  44.0??C

获取硬盘#

df -h

会有类似以下输出

Filesystem      Size  Used Avail Use% Mounted on
udev            843M     0  843M   0% /dev
tmpfs           173M  464K  173M   1% /run
/dev/vda1        30G  4.6G   24G  16% /
tmpfs           864M     0  864M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           173M     0  173M   0% /run/user/0

获取开机时间#

uptime

会有类似以下输出

 16:14:47 up 20:17,  0 users,  load average: 0.00, 0.00, 0.00

获取内存信息#

free -m

会有类似以下输出

               total        used        free      shared  buff/cache   available
Mem:            1726         388         475           1         862        1154
Swap:              0           0           0
Linux 获取状态信息
https://blog.lpkt.cn/posts/linux-get-info/
作者
lollipopkit
发布于
2022-01-28
许可协议
CC BY-NC-SA 4.0