插件窝 干货文章 详解:shell采集系统信息

详解:shell采集系统信息

echo 信息 系统 grep 211    来源:    2025-05-19

Shell脚本采集系统信息详解

一、概述

Shell脚本是采集系统信息的强大工具,可以快速获取服务器的各种运行状态和配置信息。本文将详细介绍如何使用Shell脚本采集各类系统信息。

二、基础信息采集

1. 系统基本信息

#!/bin/bash

# 获取系统信息
echo "========== 系统基本信息 =========="
echo "主机名: $(hostname)"
echo "操作系统: $(cat /etc/os-release | grep "PRETTY_NAME" | cut -d'"' -f2)"
echo "内核版本: $(uname -r)"
echo "系统架构: $(uname -m)"
echo "当前时间: $(date)"
echo "系统运行时间: $(uptime)"

2. CPU信息

echo "========== CPU信息 =========="
echo "CPU型号: $(cat /proc/cpuinfo | grep 'model name' | head -1 | cut -d':' -f2 | sed 's/^[ \t]*//')"
echo "CPU核心数: $(grep -c 'processor' /proc/cpuinfo)"
echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')"

3. 内存信息

echo "========== 内存信息 =========="
free -h | grep -v "Swap" | awk '{print "总内存: "$2, "已用: "$3, "剩余: "$4}'
echo "内存使用率: $(free | grep Mem | awk '{printf "%.2f%", $3/$2*100}')"

三、磁盘与文件系统信息

1. 磁盘使用情况

echo "========== 磁盘信息 =========="
df -h | grep -v "tmpfs" | grep -v "udev"

2. 磁盘IO信息

echo "========== 磁盘IO信息 =========="
iostat -dx 1 2 | tail -n +7

3. 大文件查找

echo "========== 大文件查找 =========="
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}'

四、网络信息采集

1. 网络接口信息

echo "========== 网络接口信息 =========="
ip addr show | grep -w "inet" | grep -v "127.0.0.1"

2. 网络连接状态

echo "========== 网络连接状态 =========="
ss -tulnp

3. 带宽使用情况

echo "========== 带宽使用情况 =========="
sar -n DEV 1 2 | grep -v "Average"

五、进程与服务信息

1. 进程信息

echo "========== 进程信息 =========="
ps aux --sort=-%cpu | head -10

2. 服务状态

echo "========== 服务状态 =========="
systemctl list-units --type=service --state=running

3. 高资源占用进程

echo "========== 高资源占用进程 =========="
top -b -n 1 | head -12

六、安全信息采集

1. 登录用户信息

echo "========== 登录用户信息 =========="
who
echo "最近登录用户:"
last | head -10

2. 特权用户检查

echo "========== 特权用户检查 =========="
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 {print $1}'

3. 开放的SUID程序

echo "========== 开放的SUID程序 =========="
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;

七、定时任务采集

echo "========== 定时任务 =========="
echo "用户定时任务:"
crontab -l
echo "系统定时任务:"
ls /etc/cron.*
cat /etc/crontab

八、整合脚本示例

将以上各部分整合成一个完整的系统信息采集脚本:

#!/bin/bash

# 定义输出文件
REPORT_FILE="system_report_$(date +%Y%m%d_%H%M%S).txt"

# 函数:打印分隔线
print_separator() {
    echo "==========================================" >> $REPORT_FILE
}

# 函数:打印标题
print_title() {
    echo "" >> $REPORT_FILE
    echo "========== $1 ==========" >> $REPORT_FILE
}

# 清空或创建报告文件
echo "系统信息采集报告 - 生成时间: $(date)" > $REPORT_FILE
print_separator

# 1. 系统基本信息
print_title "系统基本信息"
{
    echo "主机名: $(hostname)"
    echo "操作系统: $(cat /etc/os-release | grep "PRETTY_NAME" | cut -d'"' -f2)"
    echo "内核版本: $(uname -r)"
    echo "系统架构: $(uname -m)"
    echo "当前时间: $(date)"
    echo "系统运行时间: $(uptime)"
} >> $REPORT_FILE

# 2. CPU信息
print_title "CPU信息"
{
    echo "CPU型号: $(cat /proc/cpuinfo | grep 'model name' | head -1 | cut -d':' -f2 | sed 's/^[ \t]*//')"
    echo "CPU核心数: $(grep -c 'processor' /proc/cpuinfo)"
    echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')"
} >> $REPORT_FILE

# 3. 内存信息
print_title "内存信息"
{
    free -h | grep -v "Swap" | awk '{print "总内存: "$2, "已用: "$3, "剩余: "$4}'
    echo "内存使用率: $(free | grep Mem | awk '{printf "%.2f%", $3/$2*100}')"
} >> $REPORT_FILE

# 4. 磁盘信息
print_title "磁盘信息"
{
    df -h | grep -v "tmpfs" | grep -v "udev"
    echo ""
    echo "磁盘IO信息:"
    iostat -dx 1 2 | tail -n +7
} >> $REPORT_FILE

# 5. 网络信息
print_title "网络信息"
{
    echo "网络接口信息:"
    ip addr show | grep -w "inet" | grep -v "127.0.0.1"
    echo ""
    echo "网络连接状态:"
    ss -tulnp
    echo ""
    echo "带宽使用情况:"
    sar -n DEV 1 2 | grep -v "Average"
} >> $REPORT_FILE

# 6. 进程与服务
print_title "进程与服务"
{
    echo "CPU占用前10进程:"
    ps aux --sort=-%cpu | head -10
    echo ""
    echo "内存占用前10进程:"
    ps aux --sort=-%mem | head -10
    echo ""
    echo "运行中的服务:"
    systemctl list-units --type=service --state=running
} >> $REPORT_FILE

# 7. 安全信息
print_title "安全信息"
{
    echo "登录用户:"
    who
    echo ""
    echo "最近登录记录:"
    last | head -10
    echo ""
    echo "特权用户:"
    grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 {print $1}'
    echo ""
    echo "SUID程序:"
    find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
} >> $REPORT_FILE

# 8. 定时任务
print_title "定时任务"
{
    echo "用户定时任务:"
    crontab -l
    echo ""
    echo "系统定时任务:"
    ls /etc/cron.*
    cat /etc/crontab
} >> $REPORT_FILE

print_separator
echo "系统信息采集完成,报告已保存到: $REPORT_FILE"

九、脚本使用说明

  1. 将脚本保存为system_info_collector.sh
  2. 添加执行权限:chmod +x system_info_collector.sh
  3. 执行脚本:./system_info_collector.sh
  4. 脚本会在当前目录生成一个包含时间戳的报告文件

十、进阶技巧

  1. 定时采集:使用crontab设置定时任务定期执行采集脚本

    # 每天凌晨1点执行
    0 1 * * * /path/to/system_info_collector.sh
    
  2. 远程采集:结合SSH实现远程服务器信息采集

    ssh user@remote_host "/path/to/system_info_collector.sh"
    scp user@remote_host:/path/to/system_report_*.txt .
    
  3. 邮件通知:使用mail命令发送报告

    mail -s "系统信息报告" admin@example.com < $REPORT_FILE
    
  4. 日志分析:添加日志分析功能,如检查错误日志

    echo "========== 错误日志检查 =========="
    grep -i "error" /var/log/syslog | tail -20
    

通过以上Shell脚本,您可以全面了解系统的运行状态,及时发现潜在问题,为系统维护和优化提供数据支持。