sensors命令能直接显示各物理核心温度,前提是coretemp(intel)或k10temp(amd)驱动已加载且sensors-detect完成配置;否则输出为空或仅“adapter: non-i2c bus”,根本原因是内核未加载对应传感器模块,而非命令失效;可临时执行sudo modprobe coretemp/k10temp验证,或直接读取/sys/class/hwmon下毫摄氏度值(需除以1000),其中temp2_input起通常对应各物理核心。

sensors 命令能直接显示各物理核心温度,但前提是 coretemp(Intel)或 k10temp(AMD)驱动已加载且 sensors-detect 已完成配置;否则输出为空或只有 “Adapter: Non-I2C bus”。
为什么 sensors 没输出或只显示 “Adapter: Non-I2C bus”
这不是命令失效,而是内核没加载对应 CPU 的传感器驱动模块。lm-sensors 本身不带驱动,它只是读取接口,真正提供温度数据的是 coretemp(Intel)、k10temp(AMD)这类内核模块。
- 运行
sensors-detect时跳过所有 YES 提示,模块就不会写入/etc/modules,重启后丢失 - 虚拟机(VMware/VirtualBox)没有真实传感器,
sensors必然无输出 - 某些云镜像禁用
acpi_enforce_resources=lax,导致 thermal_zone 无法被识别 - 新主板或 ARM 平台(如树莓派)可能压根不支持
coretemp
临时验证:Intel CPU 执行 sudo modprobe coretemp,AMD 执行 sudo modprobe k10temp,再跑一次 sensors。成功后可追加到 /etc/modules 永久生效。
如何从 /sys/class/hwmon 定位并读取各物理核心温度
这是最底层、不依赖用户态工具的方式,适合脚本调用或容器环境。所有温度值单位为毫摄氏度(m°C),必须除以 1000 才是实际摄氏度。
- 先列出所有硬件监控目录:
ls /sys/class/hwmon/ - 逐个检查设备名:
for d in /sys/class/hwmon/hwmon*; do echo "$d:"; cat "$d/name" 2>/dev/null; done,找含coretemp或k10temp的目录(如/sys/class/hwmon/hwmon2/) - 确认后读具体核心:
cat /sys/class/hwmon/hwmon2/temp2_input→ 通常是 Core 1(注意:temp1_input多为 Package 总温,temp2_input起才是各核) - 不同平台命名不一致:部分 AMD 系统用
in*_input,某些笔记本用nct6775模块,文件名可能是temp*_input或fan*_input,需实测
怎么用 /sys/class/thermal 快速筛选出 CPU 物理核心相关温度节点
/sys/class/thermal 更侧重热策略管理,目录名带语义(如 cpu-thermal、x86_pkg_temp),比 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 - 快速筛选含 “cpu” 或 “pkg” 字样的 zone:
for z in /sys/class/thermal/thermal_zone*; do [ -f "$z/type" ] && grep -q -i "cpu\|pkg" "$z/type" && echo "$(cat $z/type): $(awk '{printf "%.1f°C", $1/1000}' "$z/temp" 2>/dev/null)"; done -
x86_pkg_temp通常对应 CPU 封装温度,cpu-thermal在部分 ARM 或嵌入式平台中才映射到物理核心,不能一概而论
真正区分“物理核心”而非逻辑 CPU(SMT/Hyper-Threading)的温度,关键在识别芯片级传感器布局——sensors 输出里的 Core 0、Core 1 是物理核心(除非是单核多线程老平台),而 /sys/class/hwmon 下的 temp*_input 编号顺序必须结合 lscpu 和 cat /sys/devices/system/cpu/cpu*/topology/core_id 手动对齐,这点极易被忽略。











