linux脚本一键设置所有处理器核心频率

2026年4月21日 0 By Majjcom
#!/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
  1. 使用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 "$@"

安装建议:

  1. 将脚本保存到 /usr/local/bin/set-freq
  2. 添加执行权限:
    sudo chmod +x /usr/local/bin/set-freq
  3. 现在可以在任何地方使用:
    sudo set-freq performance
    sudo set-freq status

这个脚本会自动检测CPU核心数量(支持任意数量的核心),提供详细的反馈信息,并且包含错误处理。