系统信息收集脚本?

wen 实用脚本 39

本文目录导读:

系统信息收集脚本?

  1. 全能型系统信息收集脚本(Linux)
  2. 轻量级快速巡检脚本(适合Docker/容器环境)
  3. 跨平台收集(适用于Mac + Linux)
  4. 收集到JSON格式(便于集成监控系统)
  5. 极简版(适合写入脚本开头做快速记录)
  6. 扩展建议

全能型系统信息收集脚本(Linux)

这个脚本会生成一份完整的系统报告,适合日常巡检或故障排查。

#!/bin/bash
# 文件名: sys_info.sh
# 功能: 收集Linux系统关键信息并输出到屏幕或文件
echo "==================== 系统基本信息 ===================="
echo "主机名: $(hostname)"
echo "操作系统: $(cat /etc/os-release 2>/dev/null | grep -w PRETTY_NAME | cut -d= -f2 | tr -d '\"')"
echo "内核版本: $(uname -r)"
echo "架构: $(uname -m)"
echo "当前时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "开机时间: $(uptime -s)" 2>/dev/null || echo "开机时间: $(uptime | awk '{print $1}')"
echo ""
echo "==================== CPU 信息 ===================="
echo "CPU型号: $(lscpu | grep 'Model name' | awk -F': ' '{print $2}')"
echo "CPU核心数: $(nproc)"
echo "CPU负载: $(uptime | awk -F'load average:' '{print $2}')"
echo ""
echo "==================== 内存信息 ===================="
free -h | awk 'NR==1{print $0} NR==2{print $0} NR==3{print $0}'
echo ""
echo "==================== 磁盘信息 ===================="
df -h | grep -v 'tmpfs\|overlay\|loop'  # 过滤不必要的伪文件系统
echo ""
echo "==================== 网络信息 ===================="
echo "IP地址: $(hostname -I | awk '{print $1}')"
echo "MAC地址: $(ip link show | grep -E 'link/ether' | awk '{print $2}')"
echo "活动连接数: $(ss -tun | wc -l)"  # 统计TCP/UDP连接数
echo ""
echo "==================== 进程与用户 ===================="
echo "当前登录用户: $(who | wc -l) 人"
echo "总进程数: $(ps aux | wc -l)"
echo "Top 5 内存占用进程:"
ps aux --sort=-%mem | head -6 | tail -5  # 不包含表头
echo ""
echo "==================== 安全与日志 ===================="
echo "最近5条登录失败记录:"
lastb 2>/dev/null | head -5 || echo "无记录(可能需要sudo权限)"
echo "最近5条成功登录记录:"
last -5

使用方法:

chmod +x sys_info.sh
./sys_info.sh
# 如果需要重定向到文件:
./sys_info.sh > system_report_$(date +%Y%m%d_%H%M).txt

轻量级快速巡检脚本(适合Docker/容器环境)

针对资源敏感环境,只输出最核心的指标。

#!/bin/bash
# 快速巡检: 输出CPU、内存、磁盘的百分比使用率
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
# CPU使用率(通过top命令计算)
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
echo "CPU使用率: ${cpu_usage}%"
# 内存使用率
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2 * 100}')
echo "内存使用率: ${mem_usage}%"
# 磁盘使用率(根分区)
disk_usage=$(df / | awk 'NR==2{print $5}' | tr -d '%')
echo "根分区磁盘使用率: ${disk_usage}%"
# 网络流量(简单版)
if [ -f /proc/net/dev ]; then
    echo "网络接口流量(bps):"
    grep -E 'eth0|ens' /proc/net/dev | awk '{print $1, "接收:", $2/1000/1000 " MB", "发送:", $10/1000/1000 " MB"}'
fi

跨平台收集(适用于Mac + Linux)

如果需要兼容MacOS,可以加入分支判断:

#!/bin/bash
# 兼容Mac/Linux的系统信息收集
echo "系统: $(uname -s)"
case "$(uname -s)" in
    Linux)
        cpu_model=$(lscpu | grep "Model name" | awk -F': ' '{print $2}')
        mem_total=$(free -h | grep Mem | awk '{print $2}')
        ;;
    Darwin)
        cpu_model=$(sysctl -n machdep.cpu.brand_string)
        mem_total=$(vm_stat | awk '/Pages active/ {split($1,a,"."); print a[1]}') # 粗略
        echo "Mac下部分命令需要brew安装"
        ;;
esac
echo "CPU: $cpu_model"
echo "内存总量(估算): $mem_total"

收集到JSON格式(便于集成监控系统)

适合需要将信息发送给API或存储到数据库的场景。

#!/bin/bash
# 输出JSON格式的系统信息
json_output="{"
json_output+="\"hostname\":\"$(hostname)\","
json_output+="\"ip\":\"$(hostname -I | awk '{print $1}')\","
json_output+="\"os\":\"$(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"')\","
json_output+="\"cpu_usage\":\"$(top -bn1 | grep Cpu | awk '{print $2 + $4}')\","
json_output+="\"ram_usage\":\"$(free | awk '/Mem/{printf("%.1f", $3/$2*100)}')\","
json_output+="\"disk_usage\":\"$(df / | awk 'NR==2{print $5}' | tr -d '%')\""
json_output+="}"
echo $json_output
# 示例输出:
# {"hostname":"server01","ip":"192.168.1.100","os":"Ubuntu 22.04.1 LTS","cpu_usage":"12.5","ram_usage":"45.2","disk_usage":"62"}

极简版(适合写入脚本开头做快速记录)

直接打印三行关键信息:

echo "==================== 系统快照 $(date +%H:%M) ===================="
echo "CPU负载: $(uptime | awk -Fload: '{print $2}' | tr -d ',')  | 内存: $(free -h | awk '/Mem/{print $3"/"$2}')  | 磁盘: $(df -h / | awk 'NR==2{print $5}')"
echo "IP: $(hostname -I | awk '{print $1}') | 进程数: $(ps aux --no-headers | wc -l) | 在线用户: $(who | wc -l)"

扩展建议

  • 如果需要远程批量收集:可以将脚本放在一台跳板机上,通过 ssh user@host 'bash -s' < sys_info.sh 远程执行。
  • 如果需要周期性收集:结合 crontab 每小时执行一次:
    0 * * * * /path/to/sys_info.sh >> /var/log/system_report_$(date +\%Y\%m\%d).log 2>&1
  • 遇到权限问题:部分命令(如 lastb)需要root权限,可以用 sudo 或改为 who /var/log/btmp 2>/dev/null

选择最适合你当前场景的版本即可,如果需要针对特定环境(如Windows、Solaris)的脚本,请补充说明您的操作系统。

抱歉,评论功能暂时关闭!