1. 系统信息收集脚本

bash

#!/bin/bash
# system_info.sh

echo "====== 系统信息 ======"
echo "主机名: $(hostname)"
echo "系统版本: $(cat /etc/redhat-release 2>/dev/null || cat /etc/issue)"
echo "内核版本: $(uname -r)"
echo "系统架构: $(arch)"
echo "启动时间: $(uptime -s)"

echo -e "\n====== CPU信息 ======"
lscpu | grep -E "Model name|Core|Socket|CPU\(s\)"

echo -e "\n====== 内存信息 ======"
free -h

echo -e "\n====== 磁盘信息 ======"
df -h

echo -e "\n====== 网络信息 ======"
ip addr show | grep -w inet

echo -e "\n====== 负载信息 ======"
w

2. 性能监控脚本

bash

#!/bin/bash
# monitor_system.sh

while true; do
    clear
    echo "$(date) 系统监控"
    echo "======================"
    
    # CPU使用率
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
    echo "CPU使用率: ${cpu_usage}%"
    
    # 内存使用
    mem_total=$(free -m | awk 'NR==2{print $2}')
    mem_used=$(free -m | awk 'NR==2{print $3}')
    mem_percent=$((mem_used*100/mem_total))
    echo "内存使用: ${mem_used}M/${mem_total}M (${mem_percent}%)"
    
    # 磁盘使用
    disk_usage=$(df -h / | awk 'NR==2{print $5}')
    echo "根分区使用: $disk_usage"
    
    # 连接数
    conn_count=$(ss -tun | wc -l)
    echo "TCP连接数: $((conn_count-1))"
    
    # 负载
    load_avg=$(uptime | awk -F'load average:' '{print $2}')
    echo "系统负载: $load_avg"
    
    sleep 5
done

3. 批量服务器管理脚本

bash

#!/bin/bash
# batch_execute.sh

SERVER_LIST=("192.168.1.10" "192.168.1.11" "192.168.1.12")
USER="root"
PORT="22"
COMMAND="$1"

if [ -z "$COMMAND" ]; then
    echo "用法: $0 '要执行的命令'"
    exit 1
fi

for server in "${SERVER_LIST[@]}"; do
    echo "====== 在 $server 上执行 ======"
    ssh -p $PORT $USER@$server "$COMMAND"
    echo
done

4. 日志分析脚本

bash

#!/bin/bash
# log_analyzer.sh

LOG_FILE="/var/log/nginx/access.log"
DATE=$(date +%Y%m%d)

echo "====== Nginx访问日志分析 ($DATE) ======"

# 总请求数
total_requests=$(wc -l < $LOG_FILE)
echo "总请求数: $total_requests"

# 状态码统计
echo -e "\n状态码分布:"
awk '{print $9}' $LOG_FILE | sort | uniq -c | sort -rn

# 访问最多的IP
echo -e "\n访问TOP 10 IP:"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -rn | head -10

# 最频繁的URL
echo -e "\n访问TOP 10 URL:"
awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -rn | head -10

# 错误请求
echo -e "\n错误请求(4xx/5xx):"
awk '$9 ~ /^[45][0-9][0-9]$/ {print $9,$7,$1}' $LOG_FILE | head -20

5. 自动备份脚本

bash

#!/bin/bash
# auto_backup.sh

BACKUP_DIR="/backup"
SOURCE_DIRS=("/etc" "/var/www" "/home")
DB_NAME="mydatabase"
DB_USER="root"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

echo "开始备份: $(date)"

# 备份文件
for dir in "${SOURCE_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        echo "备份目录: $dir"
        tar -czf $BACKUP_DIR/$DATE/$(basename $dir).tar.gz $dir
    fi
done

# 备份数据库
if command -v mysqldump &> /dev/null; then
    echo "备份数据库: $DB_NAME"
    mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DATE/db_backup.sql
    gzip $BACKUP_DIR/$DATE/db_backup.sql
fi

# 清理旧备份
find $BACKUP_DIR -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;

echo "备份完成: $(date)"

6. 安全检测脚本

bash

#!/bin/bash
# security_check.sh

echo "====== 基础安全检测 ======"

# 检查空密码用户
echo "1. 空密码用户:"
awk -F: '($2 == "") {print $1}' /etc/shadow

# 检查sudo权限用户
echo -e "\n2. 具有sudo权限的用户:"
grep -Po '^sudo.+:\K.*$' /etc/group

# 检查SSH配置
echo -e "\n3. SSH配置检查:"
grep -E "^PermitRootLogin|^PasswordAuthentication|^Protocol" /etc/ssh/sshd_config

# 检查失败登录
echo -e "\n4. 失败登录尝试:"
lastb | head -20

# 检查开放端口
echo -e "\n5. 开放端口:"
ss -tunlp

# 检查进程
echo -e "\n6. 可疑进程:"
ps aux | awk '$3 > 50.0 {print $0}'

7. Docker容器管理脚本

bash

#!/bin/bash
# docker_manager.sh

case $1 in
    "status")
        docker ps -a
        ;;
    "restart")
        docker restart $2
        ;;
    "logs")
        docker logs -f $2
        ;;
    "clean")
        # 清理停止的容器和悬空镜像
        docker container prune -f
        docker image prune -f
        ;;
    "stats")
        docker stats --no-stream
        ;;
    *)
        echo "用法: $0 {status|restart <container>|logs <container>|clean|stats}"
        ;;
esac

8. 服务健康检查脚本

bash

#!/bin/bash
# service_health_check.sh

SERVICES=("nginx" "mysql" "redis" "docker")

for service in "${SERVICES[@]}"; do
    if systemctl is-active --quiet $service; then
        echo "✓ $service 运行正常"
    else
        echo "✗ $service 服务异常"
        # 自动重启
        systemctl restart $service
        if systemctl is-active --quiet $service; then
            echo "  → $service 重启成功"
        else
            echo "  → $service 重启失败,请检查"
        fi
    fi
done

# 检查端口监听
PORTS=("80" "3306" "6379")
for port in "${PORTS[@]}"; do
    if ss -tunl | grep -q ":$port "; then
        echo "✓ 端口 $port 监听正常"
    else
        echo "✗ 端口 $port 未监听"
    fi
done

使用建议

  1. 权限管理:给脚本添加执行权限

    bash

    chmod +x script_name.sh
  2. 定时执行:使用crontab设置定时任务

    bash

    # 每天凌晨备份
    0 2 * * * /path/to/auto_backup.sh
    
    # 每5分钟检查服务
    */5 * * * * /path/to/service_health_check.sh
  3. 日志记录:重定向输出到日志文件

    bash

    ./monitor_system.sh >> /var/log/system_monitor.log 2>&1

这些脚本可以根据实际需求进行修改和扩展,建议在使用前先在测试环境验证。

本回答由 AI 生成,内容仅供参考,请仔细甄别。

Logo

Vue社区为您提供最前沿的新闻资讯和知识内容

更多推荐