#!/usr/bin/env bash # ============================================================================ # MAX Install Tools — 运维工具箱一键安装菜单 # 原创脚本,统一快速安装常用 Linux 运维工具 # 灵感来自 glances/bpytop/neofetch/iperf3/htop/speedtest-cli 等项目 # # 风险等级: 🟠 安装软件 — 会安装系统包 # 用法: bash <(curl -fsSL https://dl.unvmax.com/linux/scripts/max-tools/max-install-tools.sh) # ============================================================================ R='\033[1;31m' G='\033[1;32m' Y='\033[1;33m' B='\033[1;34m' C='\033[1;36m' M='\033[1;35m' W='\033[1;37m' N='\033[0m' GR='\033[90m' echo -e "${B}┌─────────────────────────────────────────────┐${N}" echo -e "${B}│${N} ${G}MAX 运维工具箱安装菜单${N} ${GR}(安装/更新)${N}" echo -e "${B}└─────────────────────────────────────────────┘${N}" echo TOOLS=( "htop:交互式进程监视器:htop" "btop:现代资源监视器 (Python 版 bpytop 替代):btop" "glances:全能系统监控 (top 替代):glances" "neofetch:系统信息展示:neofetch" "iperf3:网络带宽测试:iperf3" "speedtest-cli:Speedtest 命令行测速:speedtest-cli" "mtr:网络路由跟踪 + ping:mtr" "lsof:打开文件查看器:lsof" "ncdu:磁盘空间分析 (文本界面):ncdu" "jq:JSON 命令行处理器:jq" "ripgrep:超快文本搜索 (rg):ripgrep" "tmux:终端复用器:tmux" ) install_pkg() { local name="$1" desc="$2" if command -v "$name" &>/dev/null; then echo -e " ${G}✔${N} ${W}$name${N} 已安装" return fi echo -e " ${Y}安装 $name...${N} ${GR}$desc${N}" if command -v apt-get &>/dev/null; then apt-get install -y "$name" 2>/dev/null && echo -e " ${G}✔ $name 安装完成${N}" || { # fallback: pip for python tools if [[ "$name" == "glances" || "$name" == "btop" ]]; then pip3 install "$name" 2>/dev/null && echo -e " ${G}✔ $name (pip) 安装完成${N}" || echo -e " ${R}✘ $name 安装失败${N}" else echo -e " ${R}✘ $name 安装失败${N}" fi } elif command -v yum &>/dev/null; then yum install -y "$name" 2>/dev/null && echo -e " ${G}✔ $name 安装完成${N}" || echo -e " ${R}✘ $name 安装失败${N}" else echo -e " ${R}✘ 不支持的包管理器${N}" fi } install_all() { echo -e "\n ${Y}安装所有工具中...${N}\n" for tool in "${TOOLS[@]}"; do IFS=':' read -r name desc pkg <<< "$tool" install_pkg "$pkg" "$desc" done } show_menu() { local i=1 for tool in "${TOOLS[@]}"; do IFS=':' read -r name desc pkg <<< "$tool" installed=" " command -v "$name" &>/dev/null && installed="${G}✓${N}" printf " ${C}%2d)${N} %-18s %-40s [%s]\n" "$i" "$name" "$desc" "$installed" i=$((i+1)) done echo -e " ${C} a)${N} ${W}安装全部${N}" echo -e " ${C} q)${N} 退出" echo echo -e " ${Y}当前系统: $(grep -E '^ID=' /etc/os-release 2>/dev/null | cut -d= -f2 || echo 'unknown')${N}" } echo -e " ${GR}可用的系统工具列表:${N}" echo while true; do show_menu echo read -r -p "$(echo -e " ${C}选择要安装的工具编号 (1-${#TOOLS[@]}/a/q): ${N}")" choice case "$choice" in q|Q) echo -e " ${GR}退出${N}"; break ;; a|A) install_all; echo -e "\n ${G}全部安装完成!${N}"; break ;; ''|*[!0-9]*) continue ;; *) if [ "$choice" -ge 1 ] && [ "$choice" -le "${#TOOLS[@]}" ]; then IFS=':' read -r name desc pkg <<< "${TOOLS[$((choice-1))]}" install_pkg "$pkg" "$desc" fi ;; esac echo done echo -e "\n${GR}👉 安全扫描: max-security-scan.sh | 系统信息: max-sysinfo.sh${N}"