sensors命令能直接显示各物理核心温度,前提是coretemp(intel)或k10temp(amd)内核模块已加载;否则会空白或仅显示“adapter: non-i2c bus”,因lm-sensors本身无驱动,仅提供读取接口。

sensors 命令能直接显示每个物理核心温度,但前提是 coretemp(Intel)或 k10temp(AMD)内核模块已加载;否则会空白或只输出 Adapter: Non-I2C bus —— 这不是工具坏了,是驱动没就位。
为什么 sensors 没输出或只显示 “Adapter: Non-I2C bus”
lm-sensors 本身不带驱动,它只是个读取接口。真正提供温度数据的是内核模块:coretemp(Intel CPU)、k10temp(AMD CPU)或 nct6775(部分主板)。常见原因包括:
-
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。成功后 lsmod | grep -E "(coretemp|k10temp)" 应有输出。
用 sensors 直接看各物理核心温度
这是最直观的方式,输出中明确标注 Core 0、Core 1 等,单位为 °C,自带 high 和 crit 阈值,方便判断风险。
- 安装并探测:
sudo apt install lm-sensors && sudo sensors-detect,过程中遇到Probe I2C adapter?等提示一律输YES - 查看结果:
sensors,典型输出如:coretemp-isa-0000 Package id 0: +48.0°C (high = +80.0°C, crit = +100.0°C) Core 0: +46.0°C (high = +80.0°C, crit = +100.0°C) Core 1: +47.0°C (high = +80.0°C, crit = +100.0°C)
- 持续刷新看波动:
watch -n 1 sensors
注意:Package id 0 是整颗 CPU 封装温度,Core X 才是对应物理核心。逻辑核心(超线程)不会单独列温,Core 0 和 Core 1 指的是物理核心编号,与 lscpu 输出的 Core(s) per socket 对应。
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
绕过 sensors,从 /sys/class/hwmon 读原始值
这个路径不依赖用户态工具,适合脚本调用、容器或 minimal 环境。所有温度单位统一为毫摄氏度(m°C),必须除以 1000 才是实际 °C。
- 先定位 CPU 传感器目录:
for d in /sys/class/hwmon/hwmon*; do [ -f "$d/name" ] && echo "$d: $(cat $d/name 2>/dev/null)"; done,找含coretemp或k10temp的条目(比如/sys/class/hwmon/hwmon2/) - 读封装温度(通常是
temp1_input):cat /sys/class/hwmon/hwmon2/temp1_input | awk '{printf "%.1f°C", $1/1000}' - 读各核心温度:一般
temp2_input起对应 Core 0/1/2…,但顺序不固定,需实测确认 ——cat /sys/class/hwmon/hwmon2/temp2_input /sys/class/hwmon/hwmon2/temp3_input | awk '{printf "Core 0: %.1f°C\nCore 1: %.1f°C\n", $1/1000, $2/1000}'
不同平台命名差异大:有些 AMD 系统用 in*_input,部分笔记本用 nct6775 模块,文件名可能是 temp*_input 或 fan*_input,不能硬编码编号。
别把 thermal_zone 编号当核心编号
/sys/class/thermal 更侧重热策略管理,目录名带语义(如 cpu-thermal、x86_pkg_temp),但 thermal_zone0 不一定对应 CPU,thermal_zone1 反而可能是。它不按物理核心一一映射,只提供封装级或区域级温度。
- 快速筛选 CPU 相关 zone:
for z in /sys/class/thermal/thermal_zone*; do [ -f "$z/type" ] && grep -q -i "cpu\|pkg" "$z/type" && echo "$z → $(($(cat $z/temp 2>/dev/null)/1000))°C"; done - 不要假设
thermal_zone2就是 Core 2 —— 它可能只是主板某个芯片的温度节点 - 若需绑定到物理核心,必须回到
sensors或/sys/class/hwmon,/sys/class/thermal只能辅助验证封装温度趋势
真正要监控“每个物理核心”的实时温度,sensors 是首选;但它的可靠性完全取决于内核模块是否加载成功 —— 这一步跳过,后面所有方法都只是在猜。










