当 sensors 命令没有任何输出,或者只显示少量虚拟设备时,通常并不代表 Linux 系统没有温度信息,而是因为系统尚未执行 sensors-detect,同时也没有加载 coretemp、k10temp 等常见传感器内核模块。更可靠的排查方式是先完成 I2C 适配器探测并加载对应驱动模块;如果暂时不准备这样操作,也可以直接读取 /sys/class/hwmon 或 /sys/class/thermal 路径下以毫摄氏度保存的温度数值,从而查看 Linux CPU 温度和系统温度。

sensors 命令可以直接查看 CPU 封装温度以及各核心温度,但前提是必须先运行 sensors-detect 并加载对应内核模块,否则大多数情况下输出会为空,或者只显示 Adapter: Non-I2C bus 之类的虚拟信息。
为什么 sensors 没输出或只显示虚拟设备?
这通常不是 sensors 命令本身失效,而是 Linux 内核没有加载温度传感器驱动。像 coretemp(Intel 处理器)、k10temp(AMD 处理器)、nct6775(部分主板硬件监控芯片)这些模块,才是真正负责读取硬件温度数据的关键组件。
- 运行
sensors-detect时,在Probe I2C adapter?提示处建议输入YES,不要直接回车跳过,否则可能漏掉关键探测步骤 - 探测完成后,模块名称通常会写入
/etc/modules;如果没有自动写入,可手动执行sudo modprobe coretemp k10temp进行加载 - 可通过命令检查模块是否已生效:
lsmod | grep -E "(coretemp|k10temp)",如果没有输出,说明相关模块仍未成功加载 - 部分笔记本、ARM 设备(例如树莓派)以及虚拟机环境,本身就不支持这些模块,因此即使执行了
sensors,也可能无法查看 CPU 温度
绕过 sensors-detect:直接读取 /sys/class/hwmon
该路径由 Linux 内核原生提供,不依赖用户态工具,非常适合脚本监控、容器环境或嵌入式设备中直接读取温度数据。需要注意的是,这里的所有温度值单位均为毫摄氏度(m°C),必须除以 1000 才能得到实际的摄氏度数值。
- 先定位包含 CPU 温度传感器的目录:
ls /sys/class/hwmon/→ 然后逐个执行cat /sys/class/hwmon/hwmon*/name 2>/dev/null,重点查找coretemp或k10temp - 确认目录后再读取温度:
cat /sys/class/hwmon/hwmon2/temp1_input一般表示 Package 总温,temp2_input开始通常对应 Core 0、Core 1 等核心温度(具体编号会因硬件平台不同而变化) - 需要注意的是,某些 AMD 平台可能使用
in*_input而不是temp*_input,因此实际使用时应以系统输出为准,不建议硬编码固定路径 - 实时查看温度示例:
watch -n 1 'cat /sys/class/hwmon/hwmon2/temp1_input /sys/class/hwmon/hwmon2/temp2_input | awk "{printf "Package: %.1f°C\nCore 0: %.1f°C\n", $1/1000, $2/1000}"'
通过 /sys/class/thermal 快速筛选 CPU 封装温度
这个子系统更偏向 Linux 热管理与散热策略控制,目录名称通常带有明确语义,例如 x86_pkg_temp、cpu-thermal 等,相比 hwmon 更容易理解。不过需要注意,并非每个 thermal_zone* 都一定对应真实的物理温度传感器。
- 先列出所有 zone 类型:
for z in /sys/class/thermal/thermal_zone*; do [ -f "$z/type" ] && echo "$(cat $z/type): $(cat $z/temp 2>/dev/null) m°C"; done - 重点关注类型为
x86_pkg_temp或Package id 0的 zone;而cpu-thermal更常见于 ARM 平台或通用抽象层,并不一定就是 CPU 封装温度 - 一键获取 CPU 封装温度:
for z in /sys/class/thermal/thermal_zone*; do [ "$(cat $z/type 2>/dev/null)" = "x86_pkg_temp" ] && echo "Package → $(($(cat $z/temp 2>/dev/null)/1000))°C"; done - 这里的数值单位同样统一为毫摄氏度,但部分老旧内核可能返回 0 或无效值,可结合
cat $z/mode检查其状态是否为enabled
sensors 依然是查看系统温度和 CPU 温度最省心的方式,但前提是传感器探测和内核模块加载必须正确完成。一旦 sensors 无法正常工作,就不要反复纠结,直接切换到 /sys/class/hwmon 或 /sys/class/thermal 读取温度数据即可。它们不依赖额外软件,也不会受到发行版包管理差异的影响,只需要多花几秒确认具体路径和温度单位。