sensors不显示Core 0/1温度是因为缺少coretemp(Intel)或k10temp(AMD)内核模块,需运行sudo modprobe加载;也可直接读/sys/class/hwmon或/sys/class/thermal获取温度,但须结合name/type实测确认映射关系。

sensors 命令能直接显示各核心温度,但前提是内核已加载对应传感器模块——没输出不是命令失效,而是驱动没就位。
为什么 sensors 不显示 Core 0/1 温度?
常见错误现象:sensors 执行后只有 Adapter: Non-I2C bus、空行,或只列出 acpitz 等虚拟设备,完全不见 Core 0、Package id 0 字样。
- 根本原因:Intel CPU 缺少
coretemp模块,AMD CPU 缺少k10temp(或it87、nct6779等主板芯片模块),而lm-sensors本身不自带驱动 -
sudo sensors-detect过程中,在Probe I2C adapter? (YES/no)提示处直接回车 → 探测跳过,模块不会写入/etc/modules - 探测完成后未手动加载:仅运行
sensors-detect不等于模块已启用,必须执行sudo modprobe coretemp(Intel)或sudo modprobe k10temp(AMD) - 验证是否生效:
lsmod | grep -E "(coretemp|k10temp)"无输出,说明模块未加载成功
绕过 sensors-detect,直接读 /sys/class/hwmon 获取核心温度
这个路径是内核原生暴露的硬件监控接口,不依赖用户态工具,数值单位统一为毫摄氏度(m°C),适合脚本调用或容器环境。
- 先定位含 CPU 传感器的目录:
for d in /sys/class/hwmon/hwmon*; do [ -f "$d/name" ] && echo "$d: $(cat $d/name 2>/dev/null)"; done,重点关注coretemp(Intel)、k10temp(AMD) - 确认后读取封装温度(通常是
temp1_input):cat /sys/class/hwmon/hwmon2/temp1_input 2>/dev/null | awk '{printf "%.1f°C", $1/1000}' - 各核心温度一般从
temp2_input开始编号,但顺序不固定 ——temp2_input不一定对应 Core 0;需结合实际输出判断,例如:cat /sys/class/hwmon/hwmon2/temp*_input 2>/dev/null | awk '{printf "%.1f°C ", $1/1000}' - 某些平台(如部分 AMD 主板)可能用
in*_input而非temp*_input,得实测确认
用 /sys/class/thermal 快速筛选语义化 CPU 温度节点
该子系统按热策略区域组织,thermal_zone* 目录名带语义(如 x86_pkg_temp、cpu-thermal),比 hwmon 更易理解,但并非所有 zone 都对应物理核心。
- 列出所有 zone 类型:
cat /sys/class/thermal/thermal_zone*/type 2>/dev/null | paste -d' ' - - | grep -B1 -E "(x86_pkg_temp|cpu-thermal)" - 筛选并格式化输出封装温度:
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 - 注意:
thermal_zone0不一定对应 CPU,thermal_zone1反而可能是;别硬编码编号,不同主板命名差异极大 - 返回空时,可尝试匹配
cpu-thermal或Processor类型:cat /sys/class/thermal/thermal_zone*/type 2>/dev/null | grep -l "cpu-thermal"
真正麻烦的点不在“怎么读”,而在“读到的到底是谁”——temp2_input 是 Core 0 还是 Core 3,thermal_zone2 是封装还是 GPU,都得靠实测交叉验证。别信编号,多看 name 和 type,再配合负载变化观察响应延迟,才能锚定真实映射关系。


















