如何获取CPU温度?

如何获取CPU温度?

6相关链接:硬件传感器指示器风扇控制 - Lucio
21个回答

安装 lm-sensors 安装 lm-sensors

sudo apt-get install lm-sensors 

安装完成后,在终端中输入以下内容。
sudo sensors-detect

你可能还需要运行
sudo service kmod start

它会问你几个问题。对所有问题都回答“是”。最后,在终端中键入sensors以获取CPU温度。

sensors

输出:

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:      +41.0°C  (high = +78.0°C, crit = +100.0°C)  

coretemp-isa-0001
Adapter: ISA adapter
Core 1:      +41.0°C  (high = +78.0°C, crit = +100.0°C)  

w83627dhg-isa-0290
Adapter: ISA adapter
Vcore:       +1.10 V  (min =  +0.00 V, max =  +1.74 V)   
in1:         +1.60 V  (min =  +1.68 V, max =  +1.44 V)   ALARM
AVCC:        +3.30 V  (min =  +2.98 V, max =  +3.63 V)   
VCC:         +3.28 V  (min =  +2.98 V, max =  +3.63 V)   
in4:         +1.85 V  (min =  +1.66 V, max =  +1.11 V)   ALARM
in5:         +1.26 V  (min =  +1.72 V, max =  +0.43 V)   ALARM
in6:         +0.09 V  (min =  +1.75 V, max =  +0.62 V)   ALARM
3VSB:        +3.30 V  (min =  +2.98 V, max =  +3.63 V)   
Vbat:        +3.18 V  (min =  +2.70 V, max =  +3.30 V)   
fan1:          0 RPM  (min = 10546 RPM, div = 128)  ALARM
fan2:        892 RPM  (min = 2136 RPM, div = 8)  ALARM
fan3:          0 RPM  (min = 10546 RPM, div = 128)  ALARM
fan4:          0 RPM  (min = 10546 RPM, div = 128)  ALARM
fan5:          0 RPM  (min = 10546 RPM, div = 128)  ALARM
temp1:       +36.0°C  (high = +63.0°C, hyst = +55.0°C)  sensor = diode
temp2:       +39.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = diode
temp3:      +119.0°C  (high = +80.0°C, hyst = +75.0°C)  ALARM  sensor = thermistor
cpu0_vid:   +2.050 V

要查看硬盘温度,请安装hddtemp Install hddtemp
sudo apt-get install hddtemp

输出:

$ sudo hddtemp /dev/sda        
/dev/sda: ST3160813AS: 34°C

6这在所有硬件上都不起作用。在我的系统上,“传感器”始终显示+40.0°C的温度。 - Keith Thompson
6在我的13.04系统上,使用sudo service kmod start而不是sudo service module-init-tools start - knb
110你可以运行 watch sensors 命令来查看每秒更新的温度数值。 - Drew Noakes
27它会提醒你存在风险。你确定要对一切都回答“是”吗?我觉得他们不会无缘无故地放置那些警示信息... - jobukkit
5三个温度是temp1、temp2和temp3。@karthick87? - spharish
我注意到你的电脑有问题(很多警报),不管怎样,我想问一下,in4、in5和in6是什么意思?如果它们达到最大值会有什么影响? - niceman
4在2017年,使用systemd,现在是这样的:sudo systemctl start kmod - Hrvoje T
1传感器命令的唯一输出只是两个内核的温度。 - SDsolar
13要对所有的sensors-detect问题回答“是”,请运行yes yes | sensors-detect - hanshenrik
Ubuntu 16.04 LTS已经预装了此功能,尽管sensors命令的输出更为简洁。 - SDsolar
而对于显卡呢? - rogerdpack
1组件的推荐温度是多少?或者说,哪些温度应该让我感到担忧? - wes
当我回答一个关于探测各种输入/输出端口的问题时(回答“是”),我的系统卡住了。不过,它已经正确地检测到了我所需要的传感器,所以我对其他所有问题都回答“否”,它仍然正常工作。 - Peeyush Kushwaha
Φ┐ÉΦíðwatch -n 0.1 sensorsΣ╗͵»Å0.1τÚƵúǵƒÍΣ╕ǵ¼íπÇé - Trect

快速命令行解决方案;显示以毫摄氏度(m°C)为单位的温度

cat /sys/class/thermal/thermal_zone*/temp

小程序

如果你想要一种更易访问的版本,可以将硬件传感器监视器添加到Gnome-Panel:

  1. sudo apt-get install sensors-applet - 这将安装sensors-applet Install sensors-applet 包。
  2. 右键单击面板,选择添加到面板...,然后选择这个: alt text

  3. 完成。你可以通过右键单击小程序并选择首选项 -> 传感器来配置显示的传感器。

    alt text


15你的命令行解决方案可能不适用于所有情况。因为每个内核版本的路径都会有所不同。 - karthick87
3是的,对我来说没有起作用。 - 8128
3我的Ubuntu 12.04系统没有/proc/acpi/thermal_zone/THRM/temperature这个文件;事实上,在/proc目录下也没有名为temperature的任何文件。 - Keith Thompson
19这是因为'/proc'已经被弃用了,请尝试使用'/sys/class/thermal/thermal_zone0/temp'。 - mathepic
2+1 快速命令行选项。回答将受益于添加更多关于它的信息(@mathepic评论和其他可能的路径的信息)。 - LAFK says Reinstate Monica
1对于我的14.04系统,无论是命令行还是工作都不起作用(没有这个文件或目录)。 - Marty Fried
@mathepic: 为什么它被弃用了?/sys/... 目录是否仍然(像 proc 目录一样)包含零大小的按需文件? - PythoNic
由于添加面板没有起作用,我去extensions.gnome.org上找了类似的东西。 - PythoNic
这是一个GNOME 2小程序,所以很可能无法在Ubuntu Unity(默认桌面环境)或GNOME 3上使用。 - Flimm
6cat /sys/class/thermal/thermal_zone0/temp的单位是什么?您能将其转换为摄氏度/华氏度吗?...看起来前两位数字是小数点前的前两位数字,后面的数字是摄氏度的小数点后的数字。 - dylnmc
1@mathepic procfs并没有被弃用,只是在非进程信息的使用上有所限制。 - Peter Novotnak
我按照答案中给出的命令在完全更新的16.04上运行,得到的答案是66000 - Karsus
1@Peter Mortensen:我的电脑有thermal_zone0cooling_device0... cooling_device8这些文件夹。我猜可能是不同的硬件/固件导致操作系统以不同的方式创建这些文件夹?(只是猜测而已。) - Karsus
2这对我来说是有效的,但我不理解输出结果。输出结果是:53500。它的意义是什么? - alhelal
@BandaMuhammadAlHelal 这些人解释得更详细一点。 https://www.cyberciti.biz/faq/linux-find-out-raspberry-pi-gpu-and-arm-cpu-temperature-command/ (基本上您的温度为53摄氏度) - Mint
在我的Ubuntu 16.04 Kernel 4.4+上,热区0和1经常出现失真,只有热区2(对sensors不可见)始终准确无误。 - WinEunuuchs2Unix
这个在2017年7月的Ubuntu 16.04 LTS中并没有显示出来可以添加。所以我当时卸载了它,然后执行了sudo apt-get autoremove命令。 - SDsolar
3一个更易理解的输出:cat /sys/class/thermal/thermal_zone*/temp | awk '{ print ($1 / 1000) "°C" }' - Kanchu
我在CentOS 7.9上尝试了一下,/sys/class/thermal目录下没有thermal_zone*文件夹,只有以数字命名的符号链接cooling_deviceX。在任何文件夹下都没有温度文件。所以我认为这很大程度上取决于你的发行版和内核。 - undefined

一个很好的用于监测温度、风扇转速和电压的指标是psensor。它显示所有传感器的输出,并绘制图表。 还可以将选定的输出放置在指示面板上。

psensor in action

可以通过在Ubuntu软件仓库中输入以下命令来安装:
sudo apt-get install psensor

较新版本的psensor可以从ppa安装:
sudo add-apt-repository ppa:jfi/ppa
sudo apt-get update
sudo apt-get install psensor

当你在图表列中勾选框时,它还可以绘制图形。

Screenshot

这里有更多图片的一些信息。

另一个有用的链接

在某些情况下,不会显示所有传感器。然后您可以运行

sudo sensors-detect

并回答所有问题都是“是”。但在某些情况下并不完全安全,但我从未遇到过任何真正的问题。更安全的方法是采用默认答案。

可能会出现一些额外的传感器。


6在我的Ubuntu 16.04上,psensor有时会使用30%的CPU,导致温度上升。 - dirkjot
1问题仍然存在。应用程序无法使用。 - Yevgen
@raaj - 这个 bug 有没有在其他地方报告过? - reducing activity
@Eugene - 这个bug有没有在其他地方报告过? - reducing activity
1安装这个之后,我的触摸板会定期停止工作。 - Rajat
默认情况下,psensor只检测到四核CPU上的两个核心。有点奇怪。 - Ray Woodcock

不使用第三方应用程序的温度

撰写本文时,所有答案都涉及使用第三方实用程序。如果您想在不安装任何东西的情况下查找温度,请使用:

$ cat /sys/class/thermal/thermal_zone*/temp
20000
53000
50000
53000
56000
68000
49000
50000

要查看温度所指的区域,请使用以下方法:
$ paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'
INT3400 Thermal  20.0°C
SEN1             45.0°C
SEN2             51.0°C
SEN3             57.0°C
SEN4             59.0°C
pch_skylake      77.5°C
B0D4             50.0°C
x86_pkg_temp     51.0°C

温度以摄氏度存储,保留3位小数。使用sed来“美化”输出。
最后一次报告的温度是x86_pkg_temp,为54.0°C。对于Skylake i7 6700HQ CPU,我在Conky显示中使用了这个温度。

使用Conky显示温度

如果您不介意使用第三方工具,我喜欢使用Conky——一个轻量级的系统监视器。

Conky命令

在conky中,我用来监视Ivy Bridge CPU的系统变量是:

${hwmon 2 temp 1}°C

为了监控Skylake CPU,我使用了以下方法:
${hwmon 0 temp 1}°C

Conky显示

Conky的显示如下:

enter image description here

温度从72°C开始,单个CPU以3200 MHz的涡轮模式运行时达到100%。然后关闭涡轮,温度下降10°C,降至62°C,速度为2600 MHz的非涡轮模式。10秒后,再次打开涡轮,温度立即回升至72°C。

控制温度

在了解了您的温度之后,您可能想要更好地控制它。对于保持系统稳定,tlp效果非常好。它可以与thermald、Intel Powerclamp、电池与AC适配器供电的USB等配合使用。虽然高度可配置,但我从未不得不更改配置设置以获得愉快的开箱体验。在使用它之前,我的IvyBridge笔记本经常过热,出现各种问题。我现在的Skylake笔记本上安装了它,风扇除了在进行Ubuntu 16.04 LTS到18.04升级时从不运行。

您可以在这里找到详细的安装说明:防止CPU过热


4这是什么单位?苹果?摄氏度的千分之一?华氏度的59/29402? - phil294
您的报价说是48000,但是您的文字却说这是摄氏57度?我有点困惑。 - Sun
@Sun 我已经使用了更新的处理器重新生成了这个一行代码,但是没有正确修订解释。已修复! - WinEunuuchs2Unix
稍微调整一下sed命令,使其能够处理小数度数:sed 's/\(.\)..$/.\1°C/' - ncoghlan
我在想,获取内核实际上“读取”板载温度传感器时,是否有时需要额外的步骤。目前,我在实验室和野外都得到了26.8度的温度,但我实在不相信野外的那个设备能够在调制解调器旁边报告42度的温度时保持如此凉爽(类似于@Katu在这里提到的https://askubuntu.com/questions/15832/how-do-i-get-the-cpu-temperature/854029?noredirect=1#comment1394626_891639)。 - ncoghlan
@ncoghlan 我也注意到了同样的问题,当室温为25摄氏度时,传感器 INT3400 Thermal 总是报告一个不可能的20摄氏度。我只是忽略那个传感器... - WinEunuuchs2Unix
2谢谢!这个有点离题,但是你是如何创建(如此高质量的)GIF捕捉屏幕部分的呢? - Jim Raynor
2@JimRaynor 这个功能被称为屏幕录制,关于这个问题有一个问答在这里:https://askubuntu.com/questions/4428/how-can-i-record-my-screen 我正在使用 peek,你可以在链接中找到相关的使用说明。 - WinEunuuchs2Unix
漂亮的自定义,可以问一下能否分享conky配置文件吗? - d.lime
这个答案是从Ask Ubuntu上获取的,其中包含了完整的配置信息:https://www.pippim.com/2018/06/19/Setting-to-High-Performance.html 如果你更喜欢在这个网站上阅读或者想要给那个答案点赞,顶部还有一个返回Ask Ubuntu的链接。 - WinEunuuchs2Unix

hardinfo 安装 hardinfo 是一个非常有用的工具,可以获取所有硬件信息。
通过sudo apt-get install hardinfo命令来安装 hardinfo。然后你就可以通过传感器获取温度了。

sensor


22好看的工具,除了每一页都有内容(例如是空白的)之外,传感器页面例外。 - frumbert
15传感器无法工作 - Mudit Kapil
@frumbert 我觉得这取决于lm-sensors - Pandya
我也喜欢ARP表。非常方便验证连接到我的子网的设备。 - SDsolar
尽管这个程序的基准测试已经相当过时了。 - Andriy Makukha
对我来说没问题!底部还显示了一个绿色的图表。这个工具绝对是最好的! - ablaze

  1. 使用以下命令安装acpi Install acpi 的小型软件包。
  2. sudo apt-get install acpi
    
  3. 第一次需要按 Y 确认。现在输入以下命令以查找温度。
  4. acpi -t
    

26这比关于lm-sensors的答案要简单。你能解释一下acpilm-sensors之间的区别吗? - fikr4n
3在Ubuntu 16.04上,Skylake笔记本电脑上,acpi -t命令没有任何输出。这是一个有效的选项,只是不起作用--版本:acpi 1.7 - WinEunuuchs2Unix
1我在grml的Live CD系统上成功使用了acpi -t命令来监控每个Core i3处理器芯片的温度。grml中没有预安装lm-sensors,并且我无法在那里安装其他软件包。https://grml.org/ - Daniel Böhmer
1acpi对我来说只是报错“不支持的设备类型:power_supply”。 - Steven Lu
在Ubuntu 22.04 LTS上无法工作,返回空结果。 - momo2047

安装完lm-sensors之后:
sudo apt install lm-sensors

运行:
sudo sensors-detect

你可以运行以下命令来查看硬件温度:
watch -n 1 sensors

此外,风扇通常由BIOS控制。
另一个好工具是适用于英特尔酷睿处理器的i7z
sudo apt install i7z
sudo i7z

因为i7ztop一样运行,所以不需要使用watch

14我喜欢关于使用watch的提示,这是我最喜欢的之一。我还建议在watch命令中添加-d选项以突出显示差异。 - Joshua K
这让我在运行100% CPU的Ubuntu 16.04 LTS上,对我的i7-3770进行了4个核心温度读数(约77摄氏度)。 - Sun

XSensors

XSensors从libsensors库中读取有关硬件健康状况的数据,如温度、电压和风扇速度,并以数字显示的形式呈现信息。

打开终端并输入:

sudo apt-get install xsensors lm-sensors

然后通过打开终端并运行以下命令来检测您计算机的硬件传感器:
sudo sensors-detect

然后你会被问到很多关于你想让程序检测什么硬件的问题。通常情况下,接受所有问题的默认答案是安全且推荐的,除非你知道自己在做什么。

XSensors Screenshot

Xsensors vs. Psensor

XSensors和Psensor都可以监测计算机的温度和风扇转速。这两个应用程序的区别在于显示的信息详细程度和显示方式。

XSensors显示的信息比Psensor更加具体。Psensor比较小巧,不会过于显眼,它会在桌面的右上角通知区域以一个小温度计图标的形式显示。您可以随时右键点击温度计图标来显示硬件温度。

设置Psensor来检测计算机硬件的方法与Xsensors相同,通过安装lm-sensors来检测计算机的硬件传感器。然后运行以下命令来检测计算机的硬件传感器:

sudo sensors-detect  

在Ubuntu 16.04及更高版本中,Psensor会自动检测您计算机的硬件传感器,无需运行“sudo sensors-detect”命令。和Xsensors一样,请接受所有问题的默认答案。

2Psensor似乎更先进。 - MainActivity
1我同意,@Serge。psensor是我打算使用的。 - SDsolar
我也使用Psensor。 - karel

在树莓派上,你可以使用vcgencmd来获取温度。
vcgencmd measure_temp

输出:

temp=39.0'C

2不,那会给你频率。使用 vcgencmd measure_temp - MrD
抱歉,真是一个非常痛苦的复制粘贴错误 :) - Ercksen
除了Raspbian之外,是否有其他发行版可以安装这个软件?例如,树莓派可用的Ubuntu Server 19.10,但我不知道如何使这个命令可用。 - jocull

就是这样,你们要知道,不需要安装像“传感器”这样的垃圾。只需运行“acpi -V”,一切都搞定了。举个例子:
Battery 0: Charging, 91%, 00:17:25 until charged
Battery 0: design capacity 3310 mAh, last full capacity 3309 mAh = 99%
Adapter 0: on-line
Thermal 0: ok, 40.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 127.0 degrees C
Thermal 0: trip point 1 switches to mode hot at temperature 127.0 degrees C
Cooling 0: pkg-temp-0 no state information available
Cooling 1: LCD 0 of 100
Cooling 2: Processor 0 of 10
Cooling 3: Processor 0 of 10
Cooling 4: Processor 0 of 10
Cooling 5: Processor 0 of 10

比起安装所有这些和kmod,这个方法简单多了...只需要执行acpi -V命令就行了。

30对啊,因为你不需要安装那个?错了!“acpi”程序当前未安装。您可以通过输入以下命令进行安装:sudo apt-get install acpi - e-sushi
8而且,它也不总是提供相同的信息。在我的机器上,sensors 提供了温度信息,而 acpi -V 却没有显示任何相关内容,可惜。 - Per Lundberg
1acpi -V 在 Skylake 笔记本电脑上出现故障,Ubuntu 16.04,acpi 版本为 1.7。 - WinEunuuchs2Unix