sensors无输出是因内核未加载coretemp(Intel)或k10temp(AMD)驱动模块,需运行sudo modprobe coretemp/k10temp并检查/sys/class/hwmon或/sys/class/thermal下毫摄氏度温度值。

sensors 命令没输出或只显示 “Adapter: Non-I2C bus” 怎么办
这不是命令坏了,而是内核没加载对应 CPU 的传感器驱动模块。lm-sensors 本身不带驱动,它只是读取接口,真正干活的是 coretemp(Intel)、k10temp(AMD)这类内核模块。
常见原因和应对方式:
-
sensors-detect运行时跳过了所有 YES 提示,导致模块没写入/etc/modules,重启后失效 - 新主板或 ARM 平台(如树莓派)压根不支持
coretemp,sensors天然不可用 - 虚拟机环境(VMware、VirtualBox)没有真实温度传感器,
sensors必然无输出 - 某些云镜像默认禁用
acpi_enforce_resources=lax,导致 thermal_zone 无法被识别
临时补救:直接加载模块试试,比如 Intel CPU 执行 sudo modprobe coretemp;AMD 则试 sudo modprobe k10temp。成功后再跑一次 sensors。
怎么用 /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-thermal、x86_pkg_temp、INT3400 Thermal的 zone,它们大概率是 CPU 封装或核心相关 - 若看到多个 zone 都标为
cpu-thermal,说明系统把各核心做了独立映射,可分别读thermal_zone0/temp、thermal_zone1/temp等 - 数值仍是毫摄氏度,例如
echo $(( $(cat /sys/class/thermal/thermal_zone0/temp)/1000 ))°C可直接转成整数摄氏度
为什么 sensors 显示的 “Core 0” 不等于你读到的 temp2_input
这不是数据错乱,而是传感器命名和映射逻辑不一致造成的。不同主板厂商、BIOS 版本甚至内核版本,对“Core 0”的编号方式可能完全不同。
关键事实:
-
sensors输出里的Core 0是coretemp驱动按逻辑顺序编号的,不保证与物理核心一一对应 -
/sys/class/hwmon/hwmon*/temp*_input文件顺序由驱动注册顺序决定,temp2_input在某主板上是 Core 1,在另一块板上可能是 Core 3 - 同一块 CPU 上,
Package id 0和/sys/class/hwmon/*/temp1_input通常指向同一个封装温度,一致性较高;各核温度则容易错位 - 如果需要精确绑定某个物理核心(比如绑核压测时监控),唯一可靠方式是结合
taskset+perf+ 温度变化趋势交叉验证,不能单靠文件名或字段名断定
真正在意各核归属关系时,别信名字,看变化——让单核满载,观察哪个 temp*_input 或 Core X 温度跳升最明显,那个才是它。


















