如何从bash获得平均CPU温度?
Posted
技术标签:
【中文标题】如何从bash获得平均CPU温度?【英文标题】:How to get average CPU temperature from bash? 【发布时间】:2018-06-04 17:56:35 【问题描述】:如何在 Linux 上通过 bash 获取平均 CPU 温度?最好以华氏度为单位。该脚本应该能够处理不同数量的 CPU。
【问题讨论】:
【参考方案1】:你这样做:
安装
sudo apt install lm-sensors
sudo sensors-detect --auto
get_cpu_temp.sh
#!/bin/bash
# 1. get temperature
## a. split response
## Core 0: +143.6°F (high = +186.8°F, crit = +212.0°F)
IFS=')' read -ra core_temp_arr <<< $(sensors -f | grep '^Core\s[[:digit:]]\+:') #echo "$core_temp_arr[0]"
## b. find cpu usage
total_cpu_temp=0
index=0
for i in "$core_temp_arr[@]"; do :
temp=$(echo $i | sed -n 's/°F.*//; s/.*[+-]//; p; q')
let index++
total_cpu_temp=$(echo "$total_cpu_temp + $temp" | bc)
done
avg_cpu_temp=$(echo "scale=2; $total_cpu_temp / $index" | bc)
## c. build entry
temp_status="CPU: $avg_cpu_temp F"
echo $temp_status
exit 0
输出
CPU:135.50 F
【讨论】:
sensors
输出不稳定,可以根据配置改变。在脚本中,我想我会建议使用sensors -u
输出。【参考方案2】:
您也可以直接从sysfs
读取 CPU 温度(尽管路径可能因机器/操作系统而异):
重击:
temp_file=$(mktemp -t "temp-"$(date +'%Y%m%d@%H:%M:%S')"-XXXXXX")
ls $temp_file
while true; do
cat /sys/class/thermal/thermal_zone*/temp | tr '\n' ' ' >> "$temp_file"
printf "\n" >> $temp_file
sleep 2
done
如果您是 fish 用户,您可以在配置目录中添加一个函数,例如:~/.config/fish/functions/temp.fish
鱼
function temp
set temp_file (mktemp -t "temp-"(date +'%Y%m%d@%H:%M:%S')"-XXXXXX")
ls $temp_file
while true
cat /sys/class/thermal/thermal_zone*/temp | tr '\n' ' ' >> "$temp_file"
printf "\n" >> $temp_file
sleep 2
end
end
示例
【讨论】:
谢谢。我不知道这些文件。这些数字是什么单位?不是摄氏度。for e in $(cat /sys/class/thermal/thermal_zone*/temp); do printf "%s " $e
只是cat /sys/class/thermal/thermal_zone*/temp | tr '\n' ' ' >> "$temp_file"
。从手册页: tempfile 已弃用;您应该改用 mktemp(1)。
@xinthose 没问题。这些是摄氏度乘以 1000。以上是关于如何从bash获得平均CPU温度?的主要内容,如果未能解决你的问题,请参考以下文章