从命令行中查找CPU温度
1. 概述
在本教程中,我们将了解如何在 Linux 终端上检查 CPU 温度。首先,我们将了解如何在没有第三方工具帮助的情况下计算 CPU 的温度。之后,我们将介绍几个用于相同目的的有用的小实用程序。
2. 在没有第三方工具的情况下查找 CPU 温度
在 Linux 上,我们几乎可以阅读所有与硬件资源相关的可访问细节。这些详细信息包括 CPU 周期计数、CPU 温度、I/O 使用情况、网络使用情况等。这一切都是可能的,因为 Linux 让我们可以更好地控制硬件和软件。
2.1. /sys/class目录
** /sys目录是一个虚拟文件系统 ,其中包含有关 Linux 内核和硬件的大量信息。**此目录中的文件实际上并不驻留在磁盘上。相反,它们只是在我们阅读它们时即时创建和更新。
** /sys/class目录是硬件的层次结构。该目录主要包含有关向内核注册的设备的信息。**
其中一个目录称为thermo,其中包含硬件资源的温度信息:
$ ls -lL /sys/class/thermal
total 0
...
drwxr-xr-x 3 root root 0 Apr 7 00:05 cooling_device7
drwxr-xr-x 3 root root 0 Apr 7 00:05 cooling_device8
drwxr-xr-x 4 root root 0 Apr 7 00:05 thermal_zone0
drwxr-xr-x 3 root root 0 Apr 7 00:05 thermal_zone1
drwxr-xr-x 3 root root 0 Apr 7 00:05 thermal_zone2
在这个目录中,我们关注thermo_zone目录。** thermo_zone 目录对应于放置在我们主板上的温度计。**
让我们cd 进入thermo_zone0目录并检查它包含的内容:
$ cd thermal_zone0 && ls -lL
total 0
...
drwxr-xr-x 2 root root 0 Apr 7 00:05 subsystem
-rw-r--r-- 1 root root 4096 Apr 7 00:55 sustainable_power
-r--r--r-- 1 root root 4096 Apr 7 00:29 temp
-r--r--r-- 1 root root 4096 Apr 7 00:29 type
-r--r--r-- 1 root root 4096 Apr 7 00:29 trip_point_0_temp
...
正如我们所看到的,它包含许多文件和目录。但是,我们只对temp和type文件感兴趣。
2.2. temp文件_
** temp文件包含区域的实际温度。**它应该只包含一个整数值:
$ cat temp
27800
我们可以将此值除以 100 以获取以摄氏度为单位的实际温度。在这种情况下,它将是 27.8 °C。
2.3. type文件_
** type文件包含一个值,表示温度对应的区域**:
$ cat type
acpitz
acpitz温度计 位于 CPU 插槽旁边。但是,我们对 CPU 温度感兴趣。同样,对于 CPU,我们可以检查可能包含此热量信息的其他thermo_zone目录。
2.4. 把它们放在一起
以这种方式检查 CPU 温度可能很乏味,因为这些目录在不同的机器上可能不同。有趣的是,区域信息是在硬件资源的驱动程序中定义的。
出于这个原因,我们可能想要使用一个命令以一种可读的方式打印出这些信息:
$ paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'
acpitz 27.8°C
acpitz 29.8°C
x86_pkg_temp 38.0°C
让我们分解一下:
- 我们从每个thermo_zone目录中读取type和file文件并将结果提供给paste
- paste命令将对齐相应文件中的行,用制表符分隔
- 我们将paste命令的输出通过管道传输到column ,这进一步将输出对齐到列中
- 然后将column的内容通过管道传输到sed ,后者将这些值替换为可读的温度值
此外,我们可以用这个相当长的命令创建一个简单的 shell 脚本,然后直接或从另一个脚本执行它。
3. 替代方案:lm_sensors
lm_sensors 是一个方便的实用程序,用于监控温度、电压、风扇速度和其他硬件传感器信息。
3.1. 安装
在主要的 Linux 发行版上,应该已经安装了lm_sensors 。但是,如果不是,我们可以使用包管理器 从我们发行版的官方包存储库中安装它:
# Ubuntu-like
$ apt install lm-sensors
# Fedora, RHEL, openSUSE
$ yum install lm_sensors
# Arch-like
$ pacman -S lm_sensors
安装后,让我们验证一下:
$ sensors -v
sensors version 3.6.0+git with libsensors version 3.6.0+git
3.2. 用法
我们可以通过简单地输入sensors命令来使用lm_sensors :
$ sensors
acpitz-acpi-0
Adapter: ACPI interface
temp1: +27.8 C
temp2: +29.8 C
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +40.0 C
Core 0: +39.0 C
Core 1: +40.0 C
正如我们所见,每个核心的 CPU 温度分别在核心 0和核心 1字段中给出。
此外,如果它不显示 CPU 温度,我们可以预先运行sensors-detect命令。sensors-detect命令将检测连接到机器的所有可用传感器。
4. 替代:acpi
** acpi是另一个轻量级的替代品,我们可以用它来显示温度和电池信息。**
4.1. 安装
大多数发行版都没有acpi 实用程序,因此我们必须使用包名acpi从我们的官方包存储库安装它:
# Ubuntu-like
$ apt install acpi
# Fedora, RHEL, openSUSE
$ yum install acpi
# Arch-like
$ pacman -S acpi
安装后,我们来验证一下:
$ acpi -v
acpi 1.7
4.2. 用法
我们可以使用acpi打印温度信息,只需使用*-t或–thermal*选项运行它:
$ acpi -t
Thermal 0: ok, 29.8 degrees C
Thermal 1: ok, 27.8 degrees C
我们也可以使用*-i或–details*选项打印详细报告。