linux脚本一键设置所有处理器核心频率
2026年4月21日#!/bin/bash
# 设置CPU频率调控器的脚本
# 用法: set-freq <governor>
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo "请使用sudo运行此脚本: sudo set-freq <governor>"
exit 1
fi
# 检查是否提供了参数
if [ $# -eq 0 ]; then
echo "用法: set-freq <governor>"
echo "可用的governor选项:"
echo " performance - 最高性能模式"
echo " powersave - 节能模式"
echo " ondemand - 按需调节(默认)"
echo " conservative - 保守调节"
echo " userspace - 用户自定义"
echo " schedutil - 调度器调节"
exit 1
fi
GOVERNOR=$1
# 获取CPU核心数量
CPU_COUNT=$(nproc)
echo "检测到 $CPU_COUNT 个CPU核心"
echo "正在将所有核心设置为: $GOVERNOR"
# 设置所有核心
for ((i=0; i<CPU_COUNT; i++)); do
echo "设置核心 $i..."
cpufreq-set -c $i -g $GOVERNOR
# 检查命令是否成功
if [ $? -eq 0 ]; then
echo "核心 $i 设置成功"
else
echo "警告: 核心 $i 设置失败"
fi
done
echo "完成!所有核心已设置为 $GOVERNOR 模式"
# 显示当前设置状态
echo -e "\n当前CPU频率设置状态:"
cpufreq-info | grep -E "current policy|governor"
**使用方法:**
1. 将上述脚本保存为 set-freq 文件
2. 添加执行权限:
```bash
chmod +x set-freq
- 使用sudo运行:
sudo ./set-freq performance
可选增强版本(包含更多功能):
#!/bin/bash
# 增强版CPU频率设置脚本
# 用法: set-freq <governor> 或 set-freq status
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 显示帮助信息
show_help() {
echo -e "${BLUE}CPU频率调控器设置工具${NC}"
echo "用法: sudo set-freq <governor>"
echo " sudo set-freq status"
echo ""
echo "可用的governor选项:"
echo -e " ${GREEN}performance${NC} - 最高性能模式"
echo -e " ${GREEN}powersave${NC} - 节能模式"
echo -e " ${GREEN}ondemand${NC} - 按需调节(默认)"
echo -e " ${GREEN}conservative${NC} - 保守调节"
echo -e " ${GREEN}userspace${NC} - 用户自定义"
echo -e " ${GREEN}schedutil${NC} - 调度器调节"
echo ""
echo "示例:"
echo " sudo set-freq performance # 设置为高性能模式"
echo " sudo set-freq powersave # 设置为节能模式"
echo " sudo set-freq status # 查看当前状态"
}
# 检查是否以root权限运行
check_root() {
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误: 请使用sudo运行此脚本${NC}"
echo -e "用法: ${YELLOW}sudo $0 <governor>${NC}"
exit 1
fi
}
# 显示当前状态
show_status() {
echo -e "${BLUE}当前CPU信息:${NC}"
echo "CPU核心数量: $(nproc)"
echo ""
echo -e "${BLUE}各核心频率设置:${NC}"
for ((i=0; i<$(nproc); i++)); do
echo -n "核心 $i: "
cpufreq-info -c $i | grep "current policy" | cut -d: -f2 | sed 's/^[ \t]*//'
done
echo ""
echo -e "${BLUE}可用governor列表:${NC}"
cpufreq-info -c 0 | grep "available" | cut -d: -f2
}
# 主函数
main() {
# 检查参数
if [ $# -eq 0 ]; then
show_help
exit 1
fi
case "$1" in
"help"|"-h"|"--help")
show_help
exit 0
;;
"status")
show_status
exit 0
;;
*)
GOVERNOR=$1
check_root
CPU_COUNT=$(nproc)
echo -e "${BLUE}检测到 ${CPU_COUNT} 个CPU核心${NC}"
echo -e "正在将所有核心设置为: ${GREEN}${GOVERNOR}${NC}"
echo ""
SUCCESS_COUNT=0
FAIL_COUNT=0
# 设置所有核心
for ((i=0; i<CPU_COUNT; i++)); do
echo -n "设置核心 $i... "
if cpufreq-set -c $i -g $GOVERNOR 2>/dev/null; then
echo -e "${GREEN}✓${NC}"
SUCCESS_COUNT=$((SUCCESS_COUNT+1))
else
echo -e "${RED}✗${NC}"
FAIL_COUNT=$((FAIL_COUNT+1))
fi
done
echo ""
echo -e "${BLUE}设置完成!${NC}"
echo -e "成功: ${GREEN}${SUCCESS_COUNT}${NC} 个核心"
echo -e "失败: ${RED}${FAIL_COUNT}${NC} 个核心"
# 显示最终状态
if [ $SUCCESS_COUNT -gt 0 ]; then
echo ""
show_status
fi
;;
esac
}
# 运行主函数
main "$@"
以及终极版本:
#!/bin/bash
# 增强版CPU频率设置脚本
# 用法: set-freq <governor> 或 set-freq status
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 显示帮助信息
show_help() {
echo -e "${BLUE}CPU频率调控器设置工具${NC}"
echo "用法: sudo set-freq <governor>"
echo " sudo set-freq status"
echo ""
echo "可用的governor选项:"
echo -e " ${GREEN}performance${NC} - 最高性能模式"
echo -e " ${GREEN}powersave${NC} - 节能模式"
echo -e " ${GREEN}ondemand${NC} - 按需调节(默认)"
echo -e " ${GREEN}conservative${NC} - 保守调节"
echo -e " ${GREEN}userspace${NC} - 用户自定义"
echo -e " ${GREEN}schedutil${NC} - 调度器调节"
echo ""
echo "示例:"
echo " sudo set-freq performance # 设置为高性能模式"
echo " sudo set-freq powersave # 设置为节能模式"
echo " sudo set-freq status # 查看当前状态"
}
# 检查是否以root权限运行
check_root() {
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误: 请使用sudo运行此脚本${NC}"
echo -e "用法: ${YELLOW}sudo $0 <governor>${NC}"
exit 1
fi
}
# 获取指定核心的governor
get_core_governor() {
local core=$1
# 使用grep和sed提取governor信息
cpufreq-info -c $core | grep -A1 "current policy:" | grep "governor" | sed -n 's/.*governor "\([^"]*\)".*/\1/p'
}
# 获取指定核心的频率范围
get_core_freq_range() {
local core=$1
cpufreq-info -c $core | grep "frequency should be within" | sed -n 's/.*within \([0-9.]*\) \([GM]Hz\) and \([0-9.]*\) \([GM]Hz\).*/\1 \2 - \3 \4/p'
}
# 获取指定核心的当前频率
get_core_current_freq() {
local core=$1
cpufreq-info -c $core | grep "current CPU frequency" | sed -n 's/.*current CPU frequency is \([0-9.]*\) \([GM]Hz\).*/\1 \2/p'
}
# 显示当前状态
show_status() {
local CPU_COUNT=$(nproc)
echo -e "${BLUE}系统CPU信息:${NC}"
echo "CPU核心数量: $CPU_COUNT"
echo ""
echo -e "${BLUE}各核心频率设置状态:${NC}"
echo "┌──────┬─────────────┬──────────────────────┬──────────────────────┐"
echo -e "│ ${CYAN}核心${NC} │ ${CYAN}调控器${NC} │ ${CYAN}频率范围${NC} │ ${CYAN}当前频率${NC} │"
echo "├──────┼─────────────┼──────────────────────┼──────────────────────┤"
for ((i=0; i<CPU_COUNT; i++)); do
governor=$(get_core_governor $i)
freq_range=$(get_core_freq_range $i)
current_freq=$(get_core_current_freq $i)
# 为不同governor设置颜色
case "$governor" in
"performance")
gov_color="${RED}"
;;
"powersave")
gov_color="${GREEN}"
;;
"ondemand")
gov_color="${YELLOW}"
;;
*)
gov_color="${PURPLE}"
;;
esac
printf "│ %-4s │ ${gov_color}%-11s${NC} │ %-20s │ %-20s │\n" \
"$i" "$governor" "$freq_range" "$current_freq"
done
echo "└──────┴─────────────┴──────────────────────┴──────────────────────┘"
echo ""
# 显示可用governor列表
echo -e "${BLUE}可用governor列表:${NC}"
if [ $CPU_COUNT -gt 0 ]; then
cpufreq-info -c 0 | grep "available cpufreq governors" | cut -d: -f2 | sed 's/^[ \t]*//' | tr ' ' '\n' | sed 's/^/ /'
else
echo " 无法获取可用governor列表"
fi
}
# 验证governor是否可用
validate_governor() {
local governor=$1
local CPU_COUNT=$(nproc)
if [ $CPU_COUNT -eq 0 ]; then
return 1
fi
# 获取第一个核心的可用governor列表
local available_govs=$(cpufreq-info -c 0 | grep "available cpufreq governors" | cut -d: -f2 | sed 's/^[ \t]*//')
# 检查governor是否在列表中
if echo "$available_govs" | grep -q "\b$governor\b"; then
return 0
else
return 1
fi
}
# 主函数
main() {
# 检查参数
if [ $# -eq 0 ]; then
show_help
exit 1
fi
case "$1" in
"help"|"-h"|"--help")
show_help
exit 0
;;
"status")
show_status
exit 0
;;
*)
GOVERNOR=$1
# 验证governor
if ! validate_governor "$GOVERNOR"; then
echo -e "${RED}错误: 无效的governor '${GOVERNOR}'${NC}"
echo -e "${YELLOW}请使用以下可用选项:${NC}"
show_status | grep "可用governor列表" -A 10
exit 1
fi
check_root
CPU_COUNT=$(nproc)
echo -e "${BLUE}检测到 ${CPU_COUNT} 个CPU核心${NC}"
echo -e "正在将所有核心设置为: ${GREEN}${GOVERNOR}${NC}"
echo ""
SUCCESS_COUNT=0
FAIL_COUNT=0
# 显示设置前的状态
echo -e "${YELLOW}设置前的状态:${NC}"
for ((i=0; i<CPU_COUNT; i++)); do
old_gov=$(get_core_governor $i)
echo -e " 核心 $i: ${old_gov}"
done
echo ""
# 设置所有核心
for ((i=0; i<CPU_COUNT; i++)); do
echo -n "设置核心 $i... "
if cpufreq-set -c $i -g "$GOVERNOR" 2>/dev/null; then
# 验证设置是否成功
new_gov=$(get_core_governor $i)
if [ "$new_gov" = "$GOVERNOR" ]; then
echo -e "${GREEN}✓ (${new_gov})${NC}"
SUCCESS_COUNT=$((SUCCESS_COUNT+1))
else
echo -e "${RED}✗ (设置失败,当前: ${new_gov})${NC}"
FAIL_COUNT=$((FAIL_COUNT+1))
fi
else
echo -e "${RED}✗ (命令执行失败)${NC}"
FAIL_COUNT=$((FAIL_COUNT+1))
fi
done
echo ""
echo -e "${BLUE}设置完成!${NC}"
echo -e "成功: ${GREEN}${SUCCESS_COUNT}${NC} 个核心"
echo -e "失败: ${RED}${FAIL_COUNT}${NC} 个核心"
# 显示最终状态
if [ $SUCCESS_COUNT -gt 0 ]; then
echo ""
show_status
fi
;;
esac
}
# 运行主函数
main "$@"
安装建议:
- 将脚本保存到
/usr/local/bin/set-freq - 添加执行权限:
sudo chmod +x /usr/local/bin/set-freq - 现在可以在任何地方使用:
sudo set-freq performance sudo set-freq status
这个脚本会自动检测CPU核心数量(支持任意数量的核心),提供详细的反馈信息,并且包含错误处理。