Linux运维常用脚本整理
·
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
使用建议
-
权限管理:给脚本添加执行权限
bash
chmod +x script_name.sh
-
定时执行:使用crontab设置定时任务
bash
# 每天凌晨备份 0 2 * * * /path/to/auto_backup.sh # 每5分钟检查服务 */5 * * * * /path/to/service_health_check.sh
-
日志记录:重定向输出到日志文件
bash
./monitor_system.sh >> /var/log/system_monitor.log 2>&1
这些脚本可以根据实际需求进行修改和扩展,建议在使用前先在测试环境验证。
本回答由 AI 生成,内容仅供参考,请仔细甄别。
更多推荐



所有评论(0)