sensors命令输出中,CPU温度看“Package id 0”或“Core 0”等带°C的行,风扇转速看“fan1”“Fan1”等RPM值;若显示N/A或0,多因未加载对应驱动(如it87、dell_smm),非硬件故障。

sensors 命令输出怎么看温度和风扇转速
直接运行 sensors 是最可靠的方式,但输出容易看错关键字段。它默认显示所有已加载传感器模块的数据,其中 CPU 温度通常在 coretemp-isa-0000 或 k10temp 模块下,风扇转速则出现在 it87、nct6775 或 asus_wmi 等主板芯片模块里。
常见误区是把 temp1、temp2 当作 CPU 温度——它们往往是主板或南桥温度,真正代表 CPU 封装(Package)的是标有 Package id 0 的那一行;风扇转速字段名通常是 Fan1、Fan2,单位是 RPM,值为 0 不一定代表停转,可能是 BIOS 关闭了 PWM 控制或传感器未启用。
- 执行
sensors后,优先找含Package或Core的行,数值后带°C才是有效温度 - 风扇行若显示
N/A或持续为0,大概率是内核没加载对应驱动(如it87),不是硬件坏了 - 某些笔记本或 OEM 主板(如 Dell、Lenovo)需额外加载
dell_smm或thinkpad_acpi模块才能读取风扇
/sys/class/hwmon 下怎么定位 CPU 温度和风扇文件
/sys/class/hwmon 是内核暴露的原始接口,不依赖用户态工具,适合写监控脚本,但路径和命名高度依赖硬件型号和驱动。
温度值统一为毫摄氏度(m°C),需除以 1000;风扇值单位是 RPM,直接读取即可。难点在于如何从一堆 hwmon0~hwmonN 中快速锁定目标设备。
- 先用
ls /sys/class/hwmon/列出所有监控设备 - 对每个目录执行
cat name 2>/dev/null,筛选出含coretemp(Intel)、k10temp(AMD)或acpitz(ACPI 通用)的设备 - 进入该目录后,
cat temp1_input是 Package 温度,cat fan1_input是第一个风扇转速(如果存在) - 若
fan*_input不存在,说明该 hwmon 设备不提供风扇数据,换下一个目录试
thermal_zoneX/temp 为什么有时不准或为空
/sys/class/thermal/thermal_zoneX/temp 路径看似简单,但实际稳定性差。它依赖内核 thermal 子系统是否启用对应驱动,且不同 zone 类型语义不一:有的是 CPU 封装(x86_pkg_temp),有的是 SoC 整体(cpu-thermal),还有的只是机箱环境传感器(board)。
典型问题包括:thermal_zone0 可能是电池温度,thermal_zone1 是 GPU,而真正的 CPU zone 编号不固定;部分 ARM 平台或虚拟机根本不会生成任何 thermal_zone 目录。
- 运行
cat /sys/class/thermal/thermal_zone*/type 2>/dev/null | paste -d' ' - -查看各 zone 类型,只关注含pkg、cpu、processor的项 - 确认类型后,再读对应
temp文件,例如cat /sys/class/thermal/thermal_zone3/temp - 返回值为
0或极小值(如25000)往往表示传感器未就绪,不是温度异常低
为什么 sensors 显示正常但风扇不转或转速异常
即使 sensors 能读出风扇 RPM,也不代表风扇受系统控制。Linux 默认不干预风扇策略,BIOS 或 EC(嵌入式控制器)才决定转速逻辑。
常见情况是:sensors 显示 Fan1: 0 RPM,但实际风扇在转——因为某些主板(尤其 ThinkPad)把风扇转速信号线接到 EC,Linux 只能读不能写;另一些平台(如 ASUS 主板)需启用 asus_fan 内核参数或使用 fancontrol 工具手动干预。
- 检查 BIOS 设置中是否启用了 “Q-Fan Control”、“Fan Always On” 或类似选项
- 运行
sudo modprobe i2c-i801 && sudo modprobe nct6775(针对 Nuvoton 芯片)后再试sensors - 若需主动调速,必须确认硬件支持并配置
fancontrol,否则仅靠读取无法改变行为
真正麻烦的不是读不到数据,而是读到的数据和物理状态不一致——这时候得查主板手册确认传感器布局,而不是反复重装 lm-sensors。


















