Contents

从命令行中查找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
...

正如我们所看到的,它包含许多文件和目录。但是,我们只对temptype文件感兴趣。

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目录中读取typefile文件并将结果提供给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*选项打印详细报告。