sensors命令无输出通常因内核未加载coretemp或k10temp等传感器模块;需运行sudo sensors-detect并输入YES探测,再手动modprobe加载,或直接读取/sys/class/hwmon或/sys/class/thermal获取温度。

sensors 命令没输出温度?不是命令坏了,是内核没加载对应传感器模块——这是最常见、也最容易被当成“系统不支持”的误判。
为什么 sensors 执行后只显示 Adapter: Non-I2C bus 或完全空白
这是因为 lm-sensors 本身只是个读取接口,真正读硬件的是 coretemp(Intel)、k10temp(AMD)这类内核模块。它们默认不自动加载。
- 运行
sudo sensors-detect时,在Probe I2C adapter? (YES/no)提示处必须输入YES(不能直接回车),否则探测跳过,模块不会写入/etc/modules - 探测完成后需手动加载:例如 Intel CPU 执行
sudo modprobe coretemp,AMD 则用sudo modprobe k10temp - 验证是否生效:
lsmod | grep -E "(coretemp|k10temp)",无输出说明模块未就位 - 某些迷你 PC、笔记本或虚拟机(VMware/VirtualBox)压根没有物理传感器,
sensors必然为空——这不是配置问题,是硬件限制
绕过 sensors-detect,直接从 /sys/class/thermal 读封装温度
这个路径不依赖任何用户态工具,数值单位统一为毫摄氏度(m°C),适合脚本调用或快速验证。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先列出所有 thermal zone:
ls /sys/class/thermal/ - 筛选语义明确的 zone:
for z in /sys/class/thermal/thermal_zone*; do [ "$(cat $z/type 2>/dev/null)" = "x86_pkg_temp" ] && echo "$z → $(($(cat $z/temp 2>/dev/null)/1000))°C"; done - 若返回空,试试
cpu-thermal或Processor类型:cat /sys/class/thermal/thermal_zone*/type 2>/dev/null | paste -d' ' - - | grep -B1 "cpu-thermal" - 注意:不同主板命名差异大,
thermal_zone0不一定对应 CPU,thermal_zone1反而可能是;别硬编码编号
用 /sys/class/hwmon 定位核心温度(更底层、更稳定)
/sys/class/hwmon 是内核原生暴露的监控接口,比 thermal 子系统更贴近硬件,尤其适合需要读单个核心温度的场景。
- 定位含 CPU 传感器的 hwmon 目录:
for d in /sys/class/hwmon/hwmon*; do [ -f "$d/name" ] && echo "$d: $(cat $d/name 2>/dev/null)"; done - 常见 name 值:
coretemp(Intel)、k10temp(AMD)、it87(部分老主板) - 读取封装温度(通常是
temp1_input):cat /sys/class/hwmon/hwmon2/temp1_input 2>/dev/null | awk '{printf "%.1f°C ", $1/1000}' - 各核心温度一般从
temp2_input开始编号,但顺序不固定——temp2_input不一定对应 Core 0,需结合label文件或实测确认
实时监控组合:温度 + 当前频率(非 turbostat 用户适用)
turbostat 虽好,但仅限 Intel 且需 root;watch 组合更通用,但要注意刷新同步问题。
- 每秒刷新封装温度 + cpu0 当前频率:
watch -n 1 'sensors | grep "Package id 0" && cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 2>/dev/null | awk "{printf "Freq: %.0f MHz\n", $1/1000}"' - 如果
sensors不可用,换成/sys/class/thermal版本:watch -n 1 'for z in /sys/class/thermal/thermal_zone*; do [ "$(cat $z/type 2>/dev/null)" = "x86_pkg_temp" ] && echo "Temp: $(($(cat $z/temp 2>/dev/null)/1000))°C"; done; cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 2>/dev/null | awk "{printf "Freq: %.0f MHz\n", $1/1000}"' - 关键细节:不同 CPU 的
scaling_cur_freq路径可能失效(如某些 ARM 或新 AMD 平台),此时应改用cpupower frequency-info --freq,但它的输出是静态快照,无法和温度严格对齐
实际使用中,sensors 是首选,但前提是模块加载成功;一旦失败,/sys/class/hwmon 比 /sys/class/thermal 更可靠——因为前者由 CPU 厂商驱动直接暴露,后者依赖主板厂商对 thermal 子系统的实现质量,而很多 OEM 笔记本在这块做得非常随意。

















