#!/usr/bin/env bash # ============================================================================ # MAX SysInfo — 服务器系统信息概览 # 原创脚本,专为纯文本 SSH 服务端环境优化,聚焦关键指标 # 灵感源于 neofetch / screenfetch 的系统信息展示功能 # # 风险等级: 🟢 只读 — 不修改任何系统设置 # 用法: bash <(curl -fsSL https://dl.unvmax.com/linux/scripts/max-tools/max-sysinfo.sh) # ============================================================================ set -e 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 hostname=$(hostname 2>/dev/null || echo "unknown") os=$(grep -E '^PRETTY_NAME=' /etc/os-release 2>/dev/null | cut -d'"' -f2 || echo "unknown") kernel=$(uname -r 2>/dev/null || echo "unknown") arch=$(uname -m 2>/dev/null || echo "unknown") uptime_sec=$(awk '{print $1}' /proc/uptime 2>/dev/null | cut -d. -f1) up_d=$((uptime_sec/86400)) up_h=$(((uptime_sec%86400)/3600)) up_m=$(((uptime_sec%3600)/60)) echo -e " ${C}主机名:${N} ${W}$hostname${N}" echo -e " ${C}系统版本:${N} ${W}$os${N}" echo -e " ${C}内核版本:${N} ${W}$kernel${N} ${GR}$arch${N}" echo -e " ${C}运行时间:${N} ${W}${up_d}d ${up_h}h ${up_m}m${N}" cpu_model=$(grep -m1 'model name' /proc/cpuinfo 2>/dev/null | sed 's/.*: //' | sed 's/\s\+/ /g') cpu_cores=$(grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo "?") cpu_load=$(awk '{printf "%.1f %.1f %.1f", $1,$2,$3}' /proc/loadavg 2>/dev/null || echo "? ? ?") echo -e " ${C}CPU 型号:${N} ${W}$cpu_model${N}" echo -e " ${C}CPU 核心:${N} ${W}${cpu_cores}${N}" echo -e " ${C}系统负载:${N} ${W}${cpu_load}${N}" if [ -f /proc/meminfo ]; then mem_total=$(awk '/^MemTotal:/{printf "%.0f", $2/1024}' /proc/meminfo) mem_avail=$(awk '/^MemAvailable:/{printf "%.0f", $2/1024}' /proc/meminfo) mem_used=$((mem_total - mem_avail)) mem_pct=$((mem_used * 100 / mem_total)) swap_total=$(awk '/^SwapTotal:/{printf "%.0f", $2/1024}' /proc/meminfo) swap_free=$(awk '/^SwapFree:/{printf "%.0f", $2/1024}' /proc/meminfo) swap_used=$((swap_total - swap_free)) [ "$mem_pct" -gt 80 ] && mem_color=$R [ "$mem_pct" -gt 60 ] && [ "$mem_pct" -le 80 ] && mem_color=$Y [ "$mem_pct" -le 60 ] && mem_color=$G echo -e " ${C}物理内存:${N} ${mem_color}${mem_used}MB / ${mem_total}MB ($mem_pct%)${N}" if [ "$swap_total" -gt 0 ]; then swap_pct=$((swap_used * 100 / swap_total)) [ "$swap_pct" -gt 50 ] && swp_c=$R || swp_c=$G echo -e " ${C}交换分区:${N} ${swp_c}${swap_used}MB / ${swap_total}MB ($swap_pct%)${N}" fi fi echo -e "\n ${M}── 磁盘使用率 TOP5 ──${N}" df -h 2>/dev/null | grep '^/' | sort -rn -k5 | head -5 | while read -r line; do fs=$(echo "$line" | awk '{print $1}') size=$(echo "$line" | awk '{print $2}') used=$(echo "$line" | awk '{print $3}') pct=$(echo "$line" | awk '{print $5}' | tr -d '%') mount=$(echo "$line" | awk '{print $6}') [ "$pct" -gt 85 ] && c=$R [ "$pct" -gt 70 ] && [ "$pct" -le 85 ] && c=$Y [ "$pct" -le 70 ] && c=$G echo -e " ${c}${used}/${size} ($pct%)${N} ${GR}$fs → $mount${N}" done echo -e "\n ${M}── 监听端口 ──${N}" ss -tlnp 2>/dev/null | awk 'NR>1 { split($4, a, ":") port=a[length(a)] printf " %s :%s\n", $1, port }' | sort -t: -k2 -n | uniq | head -10 echo -e "\n ${M}── 最近登录 ${GR}(last 3)${N}" last -n 3 2>/dev/null | head -3 | while read -r line; do echo -e " ${GR}$line${N}" done echo echo -e "${GR}👉 查看完整报告: max-diskreport.sh | 网络分析: max-netstat.sh${N}" echo -e "${GR}👉 一键执行: bash <(curl -fsSL https://dl.unvmax.com/linux/scripts/max-tools/max-sysinfo.sh)${N}"