#!/bin/bash
#=====================================================
# 系统信息收集脚本 - 一键查看服务器全面信息
# 来源: 整合自 aqzt/kjyw 快捷运维 及社区最佳实践
# 用法: chmod +x system-info.sh && ./system-info.sh
#=====================================================

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE}         Linux 系统信息全面报告            ${NC}"
echo -e "${BLUE}============================================${NC}"
echo "报告生成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""

# 主机名
echo -e "${GREEN}[ 主机信息 ]${NC}"
echo "  主机名:     $(hostname)"
echo "  系统版本:   $(cat /etc/os-release 2>/dev/null | grep PRETTY_NAME | cut -d'"' -f2 || echo 'N/A')"
echo "  内核版本:   $(uname -r)"
echo "  架构:       $(uname -m)"
echo "  运行时间:   $(uptime -p 2>/dev/null || uptime | awk -F'up' '{print $2}' | awk -F',' '{print $1}')"
echo ""

# CPU
echo -e "${GREEN}[ CPU 信息 ]${NC}"
echo "  型号:       $(grep 'model name' /proc/cpuinfo 2>/dev/null | head -1 | cut -d':' -f2 | xargs)"
echo "  核心数:     $(nproc)"
echo "  负载:       $(uptime | awk -F'load average:' '{print $2}' | xargs)"
echo ""

# 内存
echo -e "${GREEN}[ 内存信息 ]${NC}"
free -h 2>/dev/null | grep -E '^Mem:|^Swap:' | while read line; do
    echo "  $line" | sed 's/^/  /'
done
echo ""

# 磁盘
echo -e "${GREEN}[ 磁盘信息 ]${NC}"
df -hT 2>/dev/null | grep -vE '^Filesystem|tmpfs|devtmpfs|overlay' | while read line; do
    echo "  $line" | sed 's/^/  /'
done
echo ""

# 网络
echo -e "${GREEN}[ 网络信息 ]${NC}"
echo "  内网IP:"
ip -4 addr show 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | while read ip; do
    echo "    $ip"
done
echo "  外网IP:     $(curl -s ifconfig.me 2>/dev/null || echo '获取失败')"
echo "  DNS:"
grep 'nameserver' /etc/resolv.conf 2>/dev/null | awk '{print "    "$2}'
echo ""

# 进程
echo -e "${GREEN}[ 进程信息 ]${NC}"
echo "  进程总数:   $(ps aux 2>/dev/null | wc -l)"
echo "  Zombie:     $(ps aux 2>/dev/null | awk '{if($8=="Z") print}' | wc -l)"
echo "  TOP 5 CPU 进程:"
ps aux --sort=-%cpu 2>/dev/null | head -6 | tail -5 | awk '{printf "    %-6s %-6s %s\n", $2, $3"%", $11}'
echo ""

# 端口
echo -e "${GREEN}[ 监听端口 ]${NC}"
ss -tlnp 2>/dev/null | grep LISTEN | awk '{print "    "$4" -> "$6}' | sed 's/users:(("//;s/".*//' || echo "  无法获取"
echo ""

# 用户
echo -e "${GREEN}[ 登录用户 ]${NC}"
who 2>/dev/null | awk '{print "    "$1" 来自 "$2"  "$3" "$4}' || echo "  无"
echo ""

# 安全
echo -e "${GREEN}[ 安全检查 ]${NC}"
echo "  SELinux:    $(getenforce 2>/dev/null || echo '未安装')"
echo "  Firewall:"
if command -v ufw &>/dev/null; then
    echo "    $(ufw status 2>/dev/null | head -1)"
elif command -v firewall-cmd &>/dev/null; then
    echo "    $(firewall-cmd --state 2>/dev/null || echo '未运行')"
else
    echo "    未检测到防火墙"
fi
echo ""

echo -e "${YELLOW}============================================${NC}"
echo -e "${YELLOW}  报告结束 - $(date '+%Y-%m-%d %H:%M:%S')${NC}"
echo -e "${YELLOW}============================================${NC}"