终端里的"黑客帝国":htop, glances, bpytop 系统监控工具横评

终端里的"黑客帝国":htop, glances, bpytop 系统监控工具横评

1. 引言

在Linux系统管理中,实时监控系统资源是每个运维人员和开发者的必备技能。虽然传统的top命令功能强大,但它的界面相对简陋。本文将深度评测三款终端下的"黑客帝国"式系统监控工具:htop、glances和bpytop,带你领略终端监控的艺术。

2. 工具概述

2.1 htop - 经典增强版进程监控

htop是top命令的增强版,提供了彩色界面、鼠标支持、垂直和水平滚动等现代化功能。

2.2 glances - 全能跨平台监控

glances采用C/S架构,不仅可以监控本地系统,还能通过Web界面远程监控多台服务器。

2.3 bpytop - Python编写的视觉盛宴

bpytop使用Python编写,拥有极其丰富的视觉效果和高度可定制性,是终端监控的颜值担当。

3. htop 深度解析

3.1 安装指南

创建安装脚本:install_htop.sh

bash 复制代码
#!/bin/bash

# htop 安装脚本
# 支持多种Linux发行版

set -e

echo "开始安装 htop..."

# 检测系统类型
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$ID
else
    echo "无法检测操作系统类型"
    exit 1
fi

# 根据系统类型选择安装方法
case $OS in
    ubuntu|debian)
        echo "检测到 Debian/Ubuntu 系统"
        sudo apt update
        sudo apt install -y htop
        ;;
    centos|rhel|fedora)
        echo "检测到 CentOS/RHEL/Fedora 系统"
        if command -v dnf &> /dev/null; then
            sudo dnf install -y htop
        elif command -v yum &> /dev/null; then
            sudo yum install -y htop
        fi
        ;;
    arch|manjaro)
        echo "检测到 Arch/Manjaro 系统"
        sudo pacman -Syu --noconfirm htop
        ;;
    *)
        echo "不支持的操作系统,尝试从源码编译..."
        install_from_source
        ;;
esac

# 源码编译安装函数
install_from_source() {
    echo "开始从源码编译安装 htop..."
    
    # 安装依赖
    if command -v apt &> /dev/null; then
        sudo apt install -y build-essential autoconf automake libncurses5-dev
    elif command -v yum &> /dev/null; then
        sudo yum groupinstall -y "Development Tools"
        sudo yum install -y ncurses-devel
    fi
    
    # 下载源码
    wget https://github.com/htop-dev/htop/archive/refs/tags/3.2.2.tar.gz
    tar xvf 3.2.2.tar.gz
    cd htop-3.2.2
    
    # 编译安装
    ./autogen.sh
    ./configure
    make -j$(nproc)
    sudo make install
    
    # 清理
    cd ..
    rm -rf htop-3.2.2 3.2.2.tar.gz
}

echo "htop 安装完成!"
echo "运行命令:htop 来启动程序"

3.2 配置文件详解

创建配置文件:~/.config/htop/htoprc

ini 复制代码
# htop 配置文件
# 生成时间:$(date)

# 颜色方案
color_scheme=6
# 0: Monochrome (黑白)
# 1: Black on White (黑底白字)
# 2: Light Terminal (浅色终端)
# 3: Dark Terminal (深色终端)
# 4: Colors (彩色)
# 5: Solarized (日光方案)
# 6: Alternate (交替方案)

# 显示选项
fields=0 48 17 18 38 39 40 2 46 47 49 1
sort_key=46
sort_direction=1
hide_threads=0
hide_kernel_threads=1
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
highlight_megabytes=1
highlight_threads=1
tree_view=0
header_margin=1
detailed_cpu_time=0
cpu_count_from_zero=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=6
delay=15
left_meters=AllCPUs Memory Swap
left_meter_modes=1 1 1
right_meters=Tasks LoadAverage Uptime
right_meter_modes=2 2 2

3.3 自定义功能脚本

创建功能增强脚本:htop_enhancer.sh

bash 复制代码
#!/bin/bash

# htop 功能增强脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 显示系统信息函数
show_system_info() {
    echo -e "${GREEN}=== 系统信息 ===${NC}"
    echo "主机名: $(hostname)"
    echo "操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"')"
    echo "内核版本: $(uname -r)"
    echo "架构: $(uname -m)"
    echo
}

# 进程分析函数
analyze_processes() {
    echo -e "${GREEN}=== 进程分析 ===${NC}"
    
    # 显示CPU使用率最高的进程
    echo -e "${YELLOW}CPU使用率TOP 5:${NC}"
    ps aux --sort=-%cpu | head -6 | awk '{printf "%-10s %-8s %-6s %-10s\n", $11, $2, $3"%", $4"%"}'
    
    echo
    
    # 显示内存使用率最高的进程
    echo -e "${YELLOW}内存使用率TOP 5:${NC}"
    ps aux --sort=-%mem | head -6 | awk '{printf "%-10s %-8s %-6s %-10s\n", $11, $2, $3"%", $4"%"}'
    
    echo
}

# 资源监控函数
monitor_resources() {
    echo -e "${GREEN}=== 资源监控 ===${NC}"
    
    # CPU监控
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
    echo -e "CPU使用率: ${BLUE}${cpu_usage}%${NC}"
    
    # 内存监控
    memory_info=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2}')
    echo -e "内存使用率: ${BLUE}${memory_info}${NC}"
    
    # 磁盘监控
    disk_usage=$(df -h / | awk 'NR==2{print $5}')
    echo -e "根分区使用率: ${BLUE}${disk_usage}${NC}"
    
    echo
}

# 交互式htop启动函数
start_enhanced_htop() {
    while true; do
        echo -e "${GREEN}=== 增强版 htop 菜单 ===${NC}"
        echo "1. 显示系统信息"
        echo "2. 进程分析"
        echo "3. 资源监控"
        echo "4. 启动标准 htop"
        echo "5. 启动树状视图 htop"
        echo "6. 退出"
        echo -n "请选择 [1-6]: "
        
        read choice
        case $choice in
            1)
                show_system_info
                ;;
            2)
                analyze_processes
                ;;
            3)
                monitor_resources
                ;;
            4)
                echo "启动标准 htop..."
                htop
                ;;
            5)
                echo "启动树状视图 htop..."
                htop --tree
                ;;
            6)
                echo "退出"
                break
                ;;
            *)
                echo -e "${RED}无效选择,请重新输入${NC}"
                ;;
        esac
    done
}

# 主函数
main() {
    # 检查htop是否安装
    if ! command -v htop &> /dev/null; then
        echo -e "${RED}错误: htop 未安装${NC}"
        echo "请先运行 install_htop.sh 安装 htop"
        exit 1
    fi
    
    show_system_info
    start_enhanced_htop
}

# 运行主函数
main "$@"

4. glances 全面评测

4.1 安装与配置

创建安装脚本:install_glances.sh

bash 复制代码
#!/bin/bash

# glances 安装脚本

set -e

echo "开始安装 glances..."

# Python环境检查
if ! command -v python3 &> /dev/null; then
    echo "Python3 未安装,开始安装..."
    if command -v apt &> /dev/null; then
        sudo apt update && sudo apt install -y python3 python3-pip
    elif command -v yum &> /dev/null; then
        sudo yum install -y python3 python3-pip
    fi
fi

# 安装方法选择
echo "选择安装方式:"
echo "1. pip 安装(推荐)"
echo "2. 系统包管理器安装"
echo "3. 源码安装"
echo -n "请选择 [1-3]: "

read install_choice

case $install_choice in
    1)
        echo "使用 pip 安装..."
        pip3 install glances[all]
        ;;
    2)
        echo "使用系统包管理器安装..."
        if command -v apt &> /dev/null; then
            sudo apt install -y glances
        elif command -v yum &> /dev/null; then
            sudo yum install -y glances
        elif command -v dnf &> /dev/null; then
            sudo dnf install -y glances
        else
            echo "不支持的包管理器,回退到pip安装"
            pip3 install glances[all]
        fi
        ;;
    3)
        echo "从源码安装..."
        git clone https://github.com/nicolargo/glances.git
        cd glances
        pip3 install -e .
        cd ..
        rm -rf glances
        ;;
    *)
        echo "无效选择,使用默认pip安装"
        pip3 install glances[all]
        ;;
esac

# 创建配置文件目录
mkdir -p ~/.config/glances

echo "glances 安装完成!"

4.2 glances 配置文件

创建配置文件:~/.config/glances/glances.conf

ini 复制代码
[global]
# 刷新频率
refresh=2

# 显示选项
disable_alert=no
enable_process_extended=no
process_short_name=no

# 颜色配置
theme=white
# 可选: white, black, grey

# 导出配置
export=csv
# 可选: csv, json

[cpu]
# CPU监控配置
user_careful=50
user_warning=70
user_critical=90
system_careful=50
system_warning=70
system_critical=90

[mem]
# 内存监控配置
mem_careful=50
mem_warning=70
mem_critical=90
swap_careful=50
swap_warning=70
swap_critical=90

[fs]
# 文件系统监控
filter=/

[network]
# 网络接口配置
# 自动检测所有接口
interface=auto

[connections]
# 连接监控
max_retry=3

[alert]
# 告警配置
enable=yes
cmd=echo "Glances alert: {message}"

[quicklook]
# 快速查看配置
cpu_percent=yes
mem_percent=yes
swap_percent=yes

[processlist]
# 进程列表配置
sort=auto
# 可选: auto, cpu_percent, memory_percent, io_counters

[amps]
# 应用监控
enable=no

4.3 glances 高级使用脚本

创建高级监控脚本:glances_advanced.sh

bash 复制代码
#!/bin/bash

# glances 高级监控脚本

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

# 检查glances是否安装
check_glances() {
    if ! command -v glances &> /dev/null; then
        echo -e "${RED}错误: glances 未安装${NC}"
        echo "请先运行 install_glances.sh"
        exit 1
    fi
}

# 独立监控模式
standalone_monitor() {
    echo -e "${GREEN}启动独立监控模式...${NC}"
    glances --disable-webui --time 5
}

# 客户端-服务器模式
start_server() {
    echo -e "${GREEN}启动 glances 服务器...${NC}"
    echo "服务器将在端口 61209 监听"
    glances -s -B 0.0.0.0 &
    SERVER_PID=$!
    echo "服务器PID: $SERVER_PID"
}

start_client() {
    echo -n "请输入服务器IP地址: "
    read server_ip
    echo -e "${GREEN}连接到服务器 $server_ip ...${NC}"
    glances -c $server_ip
}

# Web界面模式
start_webui() {
    echo -e "${GREEN}启动 Web 界面...${NC}"
    echo "Web界面地址: http://0.0.0.0:61208"
    glances -w &
    WEBUI_PID=$!
    echo "Web界面PID: $WEBUI_PID"
}

# RESTful API模式
start_api() {
    echo -e "${GREEN}启动 RESTful API...${NC}"
    glances -s --disable-webui &
    API_PID=$!
    echo "API服务PID: $API_PID"
    echo "API地址: http://0.0.0.0:61209/api/3"
}

# 导出监控数据
export_data() {
    echo -e "${GREEN}数据导出选项:${NC}"
    echo "1. 导出为CSV"
    echo "2. 导出为JSON"
    echo "3. 导出为InfluxDB"
    echo -n "请选择 [1-3]: "
    
    read export_choice
    case $export_choice in
        1)
            glances --export csv --export-csv-file /tmp/glances.csv &
            ;;
        2)
            glances --export json --export-json-file /tmp/glances.json &
            ;;
        3)
            glances --export influxdb &
            ;;
        *)
            echo "无效选择"
            ;;
    esac
}

# 自定义监控视图
custom_view() {
    echo -e "${GREEN}自定义监控视图...${NC}"
    glances --disable-irq --disable-folders --disable-ports \
            --disable-network --disable-diskio
}

# 进程监控增强
process_monitor() {
    echo -e "${GREEN}进程监控增强模式...${NC}"
    glances --enable-process-extended --process-short-name
}

# 显示菜单
show_menu() {
    echo -e "${BLUE}=== glances 高级监控菜单 ===${NC}"
    echo "1. 独立监控模式"
    echo "2. 启动服务器模式"
    echo "3. 连接客户端模式"
    echo "4. 启动Web界面"
    echo "5. 启动RESTful API"
    echo "6. 数据导出"
    echo "7. 自定义视图"
    echo "8. 进程监控增强"
    echo "9. 停止所有服务"
    echo "0. 退出"
    echo -n "请选择 [0-9]: "
}

# 停止服务
stop_services() {
    echo -e "${YELLOW}停止所有 glances 服务...${NC}"
    pkill -f "glances" || true
    sleep 2
    echo "服务已停止"
}

# 主函数
main() {
    check_glances
    
    while true; do
        show_menu
        read choice
        
        case $choice in
            1)
                standalone_monitor
                ;;
            2)
                start_server
                ;;
            3)
                start_client
                ;;
            4)
                start_webui
                ;;
            5)
                start_api
                ;;
            6)
                export_data
                ;;
            7)
                custom_view
                ;;
            8)
                process_monitor
                ;;
            9)
                stop_services
                ;;
            0)
                stop_services
                echo "退出"
                break
                ;;
            *)
                echo -e "${RED}无效选择${NC}"
                ;;
        esac
        
        echo
        echo -e "${YELLOW}按回车继续...${NC}"
        read
    done
}

# 运行主函数
main "$@"

5. bpytop 视觉盛宴

5.1 安装与配置

创建安装脚本:install_bpytop.sh

bash 复制代码
#!/bin/bash

# bpytop 安装脚本

set -e

echo "开始安装 bpytop..."

# 检查Python版本
python_version=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
echo "检测到 Python 版本: $python_version"

if [ $(echo "$python_version < 3.6" | bc) -eq 1 ]; then
    echo "错误: bpytop 需要 Python 3.6 或更高版本"
    exit 1
fi

# 安装依赖
echo "安装系统依赖..."
if command -v apt &> /dev/null; then
    sudo apt update
    sudo apt install -y python3-pip python3-venv psutil
elif command -v yum &> /dev/null; then
    sudo yum install -y python3-pip python3-venv python3-psutil
elif command -v dnf &> /dev/null; then
    sudo dnf install -y python3-pip python3-venv python3-psutil
elif command -v pacman &> /dev/null; then
    sudo pacman -Syu --noconfirm python-pip python-psutil
fi

# 安装方法选择
echo "选择安装方式:"
echo "1. pip 安装(推荐)"
echo "2. 系统包管理器安装"
echo "3. 从源码安装"
echo -n "请选择 [1-3]: "

read install_choice

case $install_choice in
    1)
        echo "使用 pip 安装..."
        pip3 install bpytop --upgrade
        ;;
    2)
        echo "使用系统包管理器安装..."
        if command -v apt &> /dev/null; then
            # 添加PPA(Ubuntu)
            sudo add-apt-repository ppa:bpytop/ppa -y
            sudo apt update
            sudo apt install -y bpytop
        elif command -v dnf &> /dev/null; then
            # COPR仓库(Fedora)
            sudo dnf copr enable atim/bpytop -y
            sudo dnf install -y bpytop
        else
            echo "不支持的包管理器,回退到pip安装"
            pip3 install bpytop --upgrade
        fi
        ;;
    3)
        echo "从源码安装..."
        git clone https://github.com/aristocratos/bpytop.git
        cd bpytop
        sudo make install
        cd ..
        rm -rf bpytop
        ;;
    *)
        echo "无效选择,使用默认pip安装"
        pip3 install bpytop --upgrade
        ;;
esac

# 创建配置目录
mkdir -p ~/.config/bpytop

echo "bpytop 安装完成!"
echo "运行命令: bpytop 启动程序"

5.2 bpytop 配置文件

创建配置文件:~/.config/bpytop/bpytop.conf

ini 复制代码
# bpytop 配置文件

# 颜色主题
color_theme="default"
# 可选: default, gruvbox, solarized, monokai

# 界面布局
theme_background=False
rounded_corners=True
proc_per_core=True
show_uptime=True
check_temp=True
show_cpu_freq=True
background_update=True
base_10_sizes=False

# 显示选项
draw_clock=True
clock_format="%X"
background_update=True
use_fstab=True
show_disks=True
show_io_stat=True
io_mode=True
io_graph_combined=True
show_swap=True
show_swap_detailed=True

# 网络配置
net_download=1000
net_upload=1000
net_auto=True
net_sync=True

# 进程配置
proc_gradient=True
proc_mem_bytes=True
proc_tree=True
proc_colors=True
proc_reversed=True
proc_count=5

# CPU配置
cpu_core_map=True
cpu_invert_lower=True
cpu_single_graph=False
show_coretemp=True
cpu_graph_upper="total"
cpu_graph_lower="total"

# 内存配置
mem_graphs=True
show_swap=True

# 磁盘配置
show_disks=True
disk_free_priv=True

# 电池配置
show_battery=True
selected_battery="auto"

# 更新间隔
update_ms=2000

# 自定义颜色
# 主色调
title_color="cyan"
hi_fg="white"
selected_bg="blue"

# CPU颜色
cpu_box="magenta"
cpu_color=["green","yellow","red"]

# 内存颜色
mem_box="green"
mem_color=["green","yellow","red"]

# 网络颜色
net_box="yellow"
net_color=["green","yellow","red"]

# 进程颜色
proc_color=["white","blue","cyan","green","yellow","red"]

# 自定义图形字符
graph_symbol="braille"
# 可选: braille, block, tty

tty_mode=False

5.3 bpytop 主题定制脚本

创建主题管理脚本:bpytop_themes.sh

bash 复制代码
#!/bin/bash

# bpytop 主题管理脚本

THEMES_DIR="$HOME/.config/bpytop/themes"
CONFIG_FILE="$HOME/.config/bpytop/bpytop.conf"

# 创建主题目录
mkdir -p "$THEMES_DIR"

# 颜色定义
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'

# 创建默认主题
create_default_theme() {
    cat > "$THEMES_DIR/default.theme" << 'EOF'
# 默认主题
color_theme="default"
title_color="cyan"
hi_fg="white"
selected_bg="blue"
cpu_box="magenta"
mem_box="green"
net_box="yellow"
proc_color=["white","blue","cyan","green","yellow","red"]
EOF
}

# 创建 Gruvbox 主题
create_gruvbox_theme() {
    cat > "$THEMES_DIR/gruvbox.theme" << 'EOF'
# Gruvbox 主题
color_theme="gruvbox"
title_color="#fabd2f"
hi_fg="#ebdbb2"
selected_bg="#458588"
cpu_box="#cc241d"
mem_box="#98971a" 
net_box="#d79921"
proc_color=["#ebdbb2","#458588","#689d6a","#98971a","#d79921","#cc241d"]
EOF
}

# 创建 Solarized 主题
create_solarized_theme() {
    cat > "$THEMES_DIR/solarized.theme" << 'EOF'
# Solarized 主题
color_theme="solarized"
title_color="#268bd2"
hi_fg="#93a1a1"
selected_bg="#859900"
cpu_box="#dc322f"
mem_box="#2aa198"
net_box="#b58900"
proc_color=["#93a1a1","#268bd2","#2aa198","#859900","#b58900","#dc322f"]
EOF
}

# 创建 Monokai 主题
create_monokai_theme() {
    cat > "$THEMES_DIR/monokai.theme" << 'EOF'
# Monokai 主题
color_theme="monokai"
title_color="#a6e22e"
hi_fg="#f8f8f2"
selected_bg="#66d9ef"
cpu_box="#f92672"
mem_box="#a6e22e"
net_box="#fd971f"
proc_color=["#f8f8f2","#66d9ef","#a6e22e","#fd971f","#f92672","#ae81ff"]
EOF
}

# 创建黑客帝国主题
create_matrix_theme() {
    cat > "$THEMES_DIR/matrix.theme" << 'EOF'
# 黑客帝国主题
color_theme="matrix"
title_color="#00ff00"
hi_fg="#00ff00"
selected_bg="#004400"
cpu_box="#00ff00"
mem_box="#00ff00"
net_box="#00ff00"
proc_color=["#00ff00","#00cc00","#009900","#006600","#003300"]
graph_symbol="braille"
theme_background=True
EOF
}

# 应用主题
apply_theme() {
    local theme_name=$1
    local theme_file="$THEMES_DIR/${theme_name}.theme"
    
    if [[ ! -f "$theme_file" ]]; then
        echo -e "${RED}错误: 主题文件 $theme_file 不存在${NC}"
        return 1
    fi
    
    # 备份原配置
    cp "$CONFIG_FILE" "$CONFIG_FILE.backup.$(date +%Y%m%d_%H%M%S)"
    
    # 应用新主题
    cat "$theme_file" >> "$CONFIG_FILE"
    
    echo -e "${GREEN}主题 $theme_name 应用成功!${NC}"
}

# 列出所有主题
list_themes() {
    echo -e "${CYAN}=== 可用主题 ===${NC}"
    for theme_file in "$THEMES_DIR"/*.theme; do
        if [[ -f "$theme_file" ]]; then
            theme_name=$(basename "$theme_file" .theme)
            echo -e "${YELLOW}$theme_name${NC}"
        fi
    done
}

# 创建所有主题
create_all_themes() {
    echo -e "${BLUE}创建所有内置主题...${NC}"
    create_default_theme
    create_gruvbox_theme
    create_solarized_theme
    create_monokai_theme
    create_matrix_theme
    echo -e "${GREEN}所有主题创建完成!${NC}"
}

# 预览主题
preview_theme() {
    local theme_name=$1
    echo -e "${CYAN}=== 主题预览: $theme_name ===${NC}"
    
    case $theme_name in
        "default")
            echo -e "主色调: ${CYAN}青色${NC}"
            echo -e "CPU: ${PURPLE}紫色${NC}"
            echo -e "内存: ${GREEN}绿色${NC}"
            ;;
        "gruvbox")
            echo -e "主色调: ${YELLOW}黄色${NC}"
            echo -e "CPU: ${RED}红色${NC}"
            echo -e "内存: ${GREEN}绿色${NC}"
            ;;
        "solarized")
            echo -e "主色调: ${BLUE}蓝色${NC}"
            echo -e "CPU: ${RED}红色${NC}"
            echo -e "内存: ${CYAN}青色${NC}"
            ;;
        "monokai")
            echo -e "主色调: ${GREEN}绿色${NC}"
            echo -e "CPU: ${RED}红色${NC}"
            echo -e "内存: ${GREEN}绿色${NC}"
            ;;
        "matrix")
            echo -e "所有元素: ${GREEN}矩阵绿${NC}"
            echo -e "风格: 黑客帝国"
            ;;
    esac
}

# 显示菜单
show_menu() {
    echo -e "${PURPLE}=== bpytop 主题管理器 ===${NC}"
    echo "1. 创建所有主题"
    echo "2. 列出所有主题"
    echo "3. 应用默认主题"
    echo "4. 应用 Gruvbox 主题"
    echo "5. 应用 Solarized 主题"
    echo "6. 应用 Monokai 主题"
    echo "7. 应用黑客帝国主题"
    echo "8. 预览主题"
    echo "9. 恢复默认配置"
    echo "0. 退出"
    echo -n "请选择 [0-9]: "
}

# 恢复默认配置
restore_default() {
    if [[ -f "$CONFIG_FILE.backup" ]]; then
        cp "$CONFIG_FILE.backup" "$CONFIG_FILE"
        echo -e "${GREEN}配置已恢复${NC}"
    else
        echo -e "${YELLOW}未找到备份文件${NC}"
    fi
}

# 主函数
main() {
    # 检查bpytop是否安装
    if ! command -v bpytop &> /dev/null; then
        echo -e "${RED}错误: bpytop 未安装${NC}"
        echo "请先运行 install_bpytop.sh"
        exit 1
    fi
    
    # 检查配置目录
    mkdir -p "$(dirname "$CONFIG_FILE")"
    
    while true; do
        show_menu
        read choice
        
        case $choice in
            1)
                create_all_themes
                ;;
            2)
                list_themes
                ;;
            3)
                apply_theme "default"
                ;;
            4)
                apply_theme "gruvbox"
                ;;
            5)
                apply_theme "solarized"
                ;;
            6)
                apply_theme "monokai"
                ;;
            7)
                apply_theme "matrix"
                ;;
            8)
                echo -n "输入要预览的主题名: "
                read theme_name
                preview_theme "$theme_name"
                ;;
            9)
                restore_default
                ;;
            0)
                echo "退出"
                break
                ;;
            *)
                echo -e "${RED}无效选择${NC}"
                ;;
        esac
        
        echo
        echo -e "${YELLOW}按回车继续...${NC}"
        read
    done
}

# 运行主函数
main "$@"

6. 综合对比与使用建议

6.1 功能对比表格

创建对比分析脚本:monitor_comparison.sh

bash 复制代码
#!/bin/bash

# 系统监控工具对比分析脚本

# 颜色定义
HEADER='\033[1;35m'
OK='\033[0;32m'
WARNING='\033[1;33m'
ERROR='\033[0;31m'
NC='\033[0m'

# 检查工具是否安装
check_tool() {
    local tool=$1
    if command -v $tool &> /dev/null; then
        echo -e "${OK}✓ 已安装${NC}"
        return 0
    else
        echo -e "${ERROR}✗ 未安装${NC}"
        return 1
    fi
}

# 性能测试函数
performance_test() {
    local tool=$1
    echo -e "${HEADER}测试 $tool 启动性能...${NC}"
    
    if command -v $tool &> /dev/null; then
        local start_time=$(date +%s%N)
        $tool --version > /dev/null 2>&1
        local end_time=$(date +%s%N)
        local duration=$(( (end_time - start_time) / 1000000 ))
        echo -e "启动时间: ${OK}${duration}ms${NC}"
    else
        echo -e "${ERROR}工具未安装${NC}"
    fi
}

# 内存占用测试
memory_test() {
    local tool=$1
    echo -e "${HEADER}测试 $tool 内存占用...${NC}"
    
    if command -v $tool &> /dev/null; then
        # 启动工具并在后台运行
        $tool > /dev/null 2>&1 &
        local pid=$!
        sleep 3
        
        # 获取内存使用量
        local memory_usage=$(ps -o rss= -p $pid 2>/dev/null | awk '{print $1/1024 " MB"}')
        
        # 清理进程
        kill $pid 2>/dev/null
        wait $pid 2>/dev/null
        
        echo -e "内存占用: ${OK}${memory_usage}${NC}"
    else
        echo -e "${ERROR}工具未安装${NC}"
    fi
}

# 功能对比
feature_comparison() {
    echo -e "${HEADER}=== 功能对比 ===${NC}"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "功能" "htop" "glances" "bpytop" "top" "gotop"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "--------------" "------" "------" "--------" "----------" "----------"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "彩色界面" "✓" "✓" "✓" "✗" "✓"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "鼠标支持" "✓" "✓" "✓" "✗" "✓"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "树状视图" "✓" "✗" "✓" "✗" "✗"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "网络监控" "✗" "✓" "✓" "✗" "✓"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "磁盘IO" "✗" "✓" "✓" "✗" "✓"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "温度监控" "✗" "✓" "✓" "✗" "✓"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "Web界面" "✗" "✓" "✗" "✗" "✗"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "远程监控" "✗" "✓" "✗" "✗" "✗"
    printf "%-15s | %-6s | %-6s | %-8s | %-10s | %-10s\n" "主题定制" "有限" "有限" "丰富" "无" "中等"
}

# 使用场景建议
usage_scenarios() {
    echo
    echo -e "${HEADER}=== 使用场景建议 ===${NC}"
    
    echo -e "${OK}htop - 传统进程管理${NC}"
    echo "适用场景:"
    echo "  • 进程管理和调试"
    echo "  • 系统资源快速查看"
    echo "  • 需要树状进程视图"
    echo "  • 交互式进程操作"
    
    echo
    echo -e "${OK}glances - 全能系统监控${NC}"
    echo "适用场景:"
    echo "  • 多服务器监控"
    echo "  • Web界面访问"
    echo "  • 历史数据记录"
    echo "  • 告警和通知"
    echo "  • 远程系统监控"
    
    echo
    echo -e "${OK}bpytop - 现代化视觉监控${NC}"
    echo "适用场景:"
    echo "  • 本地系统详细监控"
    echo "  • 视觉效果要求高"
    echo "  • 需要详细的硬件监控"
    echo "  • 主题定制需求"
}

# 安装状态检查
check_installation() {
    echo -e "${HEADER}=== 安装状态检查 ===${NC}"
    echo -n "htop:    "; check_tool htop
    echo -n "glances: "; check_tool glances
    echo -n "bpytop:  "; check_tool bpytop
}

# 性能对比
performance_comparison() {
    echo
    echo -e "${HEADER}=== 性能对比 ===${NC}"
    performance_test htop
    performance_test glances
    performance_test bpytop
}

# 内存占用对比
memory_comparison() {
    echo
    echo -e "${HEADER}=== 内存占用对比 ===${NC}"
    memory_test htop
    memory_test glances
    memory_test bpytop
}

# 推荐配置
recommendation() {
    echo
    echo -e "${HEADER}=== 最终推荐 ===${NC}"
    echo "根据功能、性能和易用性,推荐如下:"
    echo
    echo -e "${OK}🏆 最佳全能: glances${NC}"
    echo "  理由: 功能最全面,支持远程监控和Web界面"
    echo
    echo -e "${OK}🎨 最佳视觉: bpytop${NC}"
    echo "  理由: 界面最美观,信息展示最详细"
    echo
    echo -e "${OK}⚡ 最轻量级: htop${NC}"
    echo "  理由: 启动最快,资源占用最低"
}

# 主函数
main() {
    echo -e "${HEADER}系统监控工具综合对比分析${NC}"
    echo "=========================================="
    
    check_installation
    feature_comparison
    performance_comparison
    memory_comparison
    usage_scenarios
    recommendation
}

# 运行主函数
main "$@"

7. 总结

通过本文的详细评测和实战脚本,我们可以看到三个工具各有特色:

  • htop 适合传统的进程管理和快速系统检查
  • glances 适合需要全面监控和远程访问的场景
  • bpytop 适合追求视觉效果和详细硬件监控的用户

建议根据实际需求选择合适的工具,或者组合使用以获得最佳监控体验。所有提供的脚本都可以直接运行,帮助您快速搭建完整的系统监控环境。

相关推荐
L***B5681 小时前
如何安装linux版本的node.js
linux·运维·node.js
LCG元1 小时前
终极武器:用 systemd 管理你的自定义应用服务(附配置文件)
linux
脏脏a2 小时前
【Linux】Linux进程状态深度解析
linux·运维·服务器
凉晓风2 小时前
Linux中常见几种自启动方式的区别
linux·运维·服务器
LCG元2 小时前
考古利器:find 命令的高级用法,按时间、大小、内容精准查找
linux
U***74693 小时前
Linux(CentOS)安装 MySQL
linux·mysql·centos
3***g2053 小时前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
Dovis(誓平步青云)3 小时前
《内核视角下的 Linux 锁与普通生产消费模型:同步原语设计与性能优化思路》
linux·运维·性能优化
xu_yule4 小时前
Linux_13(多线程)页表详解+轻量级进程+pthread_create
linux·运维·服务器