插件窝 干货文章 Linux一键测速脚本SuperBench.sh

Linux一键测速脚本SuperBench.sh

测试 echo RESET SuperBench 292    来源:    2025-05-11

以下是一个功能强大的Linux一键测速脚本 SuperBench.sh 的解析和优化版本,包含基础测试、网络测速、磁盘IO测试等功能:

#!/bin/bash
# SuperBench.sh - Linux System Performance Benchmark Script
# Author: AI Assistant (optimized version)
# Original: Oldking (https://www.oldking.net/350.html)

# 颜色定义
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RESET='\033[0m'
BOLD='\033[1m'

# 全局变量
VER="2024-01-20"
IP_API=("ip.sb" "ipinfo.io" "ifconfig.me")
IPV4_CHECK_API="https://api.ipify.org"
IPV6_CHECK_API="https://api6.ipify.org"

# 检查root权限
check_root(){
    if [[ $EUID -ne 0 ]]; then
        echo -e "${RED}错误:本脚本需要root权限才能运行${RESET}"
        exit 1
    fi
}

# 系统信息检测
sys_info(){
    echo -e "${BOLD}\n===== 系统信息 =====${RESET}"

    # 获取主机名
    hostname=$(hostname)

    # 获取操作系统信息
    if [ -f /etc/os-release ]; then
        os_name=$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)
    elif [ -f /etc/redhat-release ]; then
        os_name=$(cat /etc/redhat-release)
    else
        os_name=$(uname -o)
    fi

    # 获取内核版本
    kernel=$(uname -r)

    # 获取CPU信息
    cpu_model=$(grep "model name" /proc/cpuinfo | head -n1 | awk -F: '{print $2}' | sed 's/^[ \t]*//')
    cpu_cores=$(grep -c "processor" /proc/cpuinfo)

    # 获取内存信息
    mem_total=$(free -m | awk '/Mem:/ {print $2}')

    # 获取虚拟化类型
    if [ -f /proc/cpuinfo ]; then
        virtualization=$(grep -E "vmx|svm" /proc/cpuinfo > /dev/null && echo "KVM" || \
                         (dmesg | grep -i hypervisor > /dev/null && echo $(dmesg | grep -i hypervisor | head -1 | awk '{print $3}') || echo "Physical"))
    else
        virtualization="Unknown"
    fi

    # 输出系统信息
    echo -e "主机名    : ${BLUE}$hostname${RESET}"
    echo -e "操作系统  : ${BLUE}$os_name${RESET}"
    echo -e "内核版本  : ${BLUE}$kernel${RESET}"
    echo -e "CPU型号   : ${BLUE}$cpu_model${RESET}"
    echo -e "CPU核心数 : ${BLUE}$cpu_cores${RESET}"
    echo -e "内存大小  : ${BLUE}${mem_total}MB${RESET}"
    echo -e "虚拟化类型: ${BLUE}$virtualization${RESET}"
}

# 网络信息检测
net_info(){
    echo -e "${BOLD}\n===== 网络信息 =====${RESET}"

    # 获取IP地址
    ipv4=$(curl -s4 $IPV4_CHECK_API)
    ipv6=$(curl -s6 $IPV6_CHECK_API)

    # 获取ASN和ISP信息
    asn_info=$(curl -s https://ipinfo.io/$ipv4/org)

    # 获取地理位置
    country=$(curl -s https://ipinfo.io/$ipv4/country)
    city=$(curl -s https://ipinfo.io/$ipv4/city)

    echo -e "IPv4地址 : ${BLUE}$ipv4${RESET}"
    [[ -n "$ipv6" ]] && echo -e "IPv6地址 : ${BLUE}$ipv6${RESET}"
    echo -e "ASN/ISP  : ${BLUE}$asn_info${RESET}"
    echo -e "地理位置 : ${BLUE}$country, $city${RESET}"
}

# 磁盘性能测试
disk_test(){
    echo -e "${BOLD}\n===== 磁盘I/O测试 =====${RESET}"

    # 检查是否有写入权限
    if ! touch /tmp/superbench_io_test 2>/dev/null; then
        echo -e "${RED}错误:没有写入权限,跳过磁盘测试${RESET}"
        return
    fi
    rm -f /tmp/superbench_io_test

    # 测试目录选择
    test_dir="/tmp"
    [ -d "/home" ] && test_dir="/home"

    # 执行DD测试
    echo -e "测试目录: ${BLUE}$test_dir${RESET}"
    echo -e "${YELLOW}测试写入速度...${RESET}"
    io_write=$(dd if=/dev/zero of=$test_dir/superbench_io_test bs=1M count=512 conv=fdatasync 2>&1 | awk '/copied/ {print $(NF-1)" "$NF}')

    echo -e "${YELLOW}测试读取速度...${RESET}"
    io_read=$(dd if=$test_dir/superbench_io_test of=/dev/null bs=1M count=512 2>&1 | awk '/copied/ {print $(NF-1)" "$NF}')

    # 清理测试文件
    rm -f $test_dir/superbench_io_test

    echo -e "写入速度: ${GREEN}$io_write${RESET}"
    echo -e "读取速度: ${GREEN}$io_read${RESET}"
}

# 网络速度测试
speed_test(){
    echo -e "${BOLD}\n===== 网络速度测试 =====${RESET}"

    # 检查curl是否存在
    if ! command -v curl &> /dev/null; then
        echo -e "${RED}错误:curl未安装,无法进行网络测试${RESET}"
        return
    fi

    # 测试服务器列表
    servers=(
        "http://speedtest.newark.linode.com/100MB-newark.bin"
        "http://speedtest.singapore.linode.com/100MB-singapore.bin"
        "http://speedtest.london.linode.com/100MB-london.bin"
    )

    for server in "${servers[@]}"; do
        domain=$(echo $server | awk -F/ '{print $3}')
        echo -e "\n测试服务器: ${BLUE}$domain${RESET}"

        # 计算下载速度
        speed=$(curl -o /dev/null -w "%{speed_download}" -s "$server" | awk '{printf("%.2f MB/s", $1/1048576)}')

        echo -e "下载速度: ${GREEN}$speed${RESET}"
    done
}

# 综合性能测试
bench_all(){
    check_root
    clear

    echo -e "${BOLD}${GREEN}SuperBench.sh v$VER - Linux性能测试脚本${RESET}"
    echo -e "${BOLD}${YELLOW}开始全面测试...${RESET}"

    # 执行所有测试
    sys_info
    net_info
    disk_test
    speed_test

    echo -e "${BOLD}${GREEN}\n所有测试完成!${RESET}"
}

# 显示帮助信息
usage(){
    echo -e "${BOLD}SuperBench.sh 使用说明${RESET}"
    echo -e "版本: v$VER"
    echo -e "用法: $0 [选项]"
    echo -e "选项:"
    echo -e "  -a, --all        执行全面测试 (默认)"
    echo -e "  -s, --system     只测试系统信息"
    echo -e "  -n, --network    只测试网络信息"
    echo -e "  -d, --disk       只测试磁盘性能"
    echo -e "  -p, --speed      只测试网络速度"
    echo -e "  -h, --help       显示帮助信息"
}

# 主函数
main(){
    case $1 in
        "-a"|"--all")
            bench_all
            ;;
        "-s"|"--system")
            sys_info
            ;;
        "-n"|"--network")
            net_info
            ;;
        "-d"|"--disk")
            disk_test
            ;;
        "-p"|"--speed")
            speed_test
            ;;
        "-h"|"--help")
            usage
            ;;
        *)
            bench_all
            ;;
    esac
}

main "$@"

脚本功能说明:

  1. 系统信息检测

    • 主机名、操作系统、内核版本
    • CPU型号和核心数
    • 内存大小
    • 虚拟化类型检测
  2. 网络信息检测

    • IPv4/IPv6地址检测
    • ASN和ISP信息
    • 地理位置检测
  3. 磁盘性能测试

    • 使用dd命令测试读写速度
    • 自动选择测试目录(优先使用/home目录)
  4. 网络速度测试

    • 测试多个全球节点下载速度
    • 使用Linode的全球测速节点
  5. 模块化设计

    • 支持单独运行特定测试模块
    • 友好的命令行参数支持

使用说明:

# 赋予执行权限
chmod +x SuperBench.sh

# 完整测试
./SuperBench.sh -a 或 ./SuperBench.sh

# 单独测试
./SuperBench.sh -s  # 只测试系统信息
./SuperBench.sh -n  # 只测试网络信息
./SuperBench.sh -d  # 只测试磁盘性能
./SuperBench.sh -p  # 只测试网络速度

注意事项:

  1. 需要root权限运行以获得准确信息
  2. 磁盘测试会创建临时文件(测试完成后自动删除)
  3. 网络测试需要curl工具支持
  4. 测试结果会因服务器负载和网络状况有所波动

您可以根据需要修改测试服务器列表或添加更多测试项目。