#!/usr/bin/env bash
# ============================================================
# 服务器只读巡检脚本 v1.2
# 用途：部署前体检 / 日常巡检，全程只读，不修改系统状态
# 用法：bash server-inspect.sh
# ============================================================
set -uo pipefail

sep() { printf '\n\n########## %s ##########\n' "$1"; }

sep "系统标识"
cat /etc/os-release 2>/dev/null | head -5
uname -a
uname -m

sep "CPU"
nproc
lscpu 2>/dev/null | grep -E '^(CPU\(s\)|Model name|Architecture|Hypervisor)'

sep "内存"
free -h
swapon --show 2>/dev/null
grep -E 'MemTotal|MemAvailable|Committed_AS' /proc/meminfo

sep "磁盘"
df -hT | grep -vE 'tmpfs|overlay|shm'
df -i / | tail -1

sep "监听端口"
ss -ltnp 2>/dev/null

sep "防火墙"
systemctl is-active firewalld 2>/dev/null
ufw status verbose 2>/dev/null | head -20

sep "容器"
docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' 2>/dev/null

sep "资源占用 TOP"
ps -eo pmem,rss,comm,args --sort=-rss 2>/dev/null | head -10

sep "常用工具就绪情况"
for t in curl wget git jq tar unzip lsof ss gcc make; do
  printf '%-8s=' "$t"
  command -v "$t" >/dev/null 2>&1 && echo OK || echo MISSING
done

sep "外网连通性"
curl -s -o /dev/null -w 'npm registry: %{http_code} (%{time_total}s)\n' --max-time 8 https://registry.npmjs.org/ 2>/dev/null

printf '\n\n=== 巡检完成 ===\n'
