如何从 bash 获得平均 CPU 温度?

How to get average CPU temperature from bash?

如何获取 Linux 上 bash 的平均 CPU 温度?最好是华氏度。该脚本应该能够处理不同数量的 CPUs.

你这样做:

安装

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

您还可以直接从 sysfs 读取 CPU 温度(尽管路径可能从 machine/OS 到 machine/OS 不同):

Bash:

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

示例