返回
SHELL 脚本指南:增强系统管理和自动化任务
后端
2024-02-13 10:42:37
引言
Shell 脚本作为一种强大的工具,可以极大提升系统管理和自动化任务的效率。我们整理了九个实用的 shell 脚本示例,涵盖了从系统维护到日常任务自动化的方方面面,帮助你打造更高效、更智能的工作流程。
1. Dos 攻击防范(自动屏蔽攻击 IP)
#!/bin/bash
# 获取当前时间戳
timestamp=$(date +%s)
# 读取被攻击 IP 地址列表
attacking_ips=$(grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort -u)
# 封禁攻击 IP
for ip in $attacking_ips; do
iptables -A INPUT -s $ip -j DROP
echo "$ip 已被封禁至 $timestamp" >> /var/log/blocked_ips.log
done
2. Linux 系统发送告警脚本
#!/bin/bash
# 定义告警等级
warning_level=$1
# 定义告警内容
alert_message=$2
# 定义告警接收人邮箱
recipient_email=$3
# 发送告警邮件
echo "$alert_message" | mail -s "系统告警 - 级别: $warning_level" $recipient_email
3. MySQL 数据库备份单循环
#!/bin/bash
# 定义备份文件名
backup_file="db_backup_$(date +%Y%m%d).sql"
# 定义数据库名称
database_name="my_database"
# 定义 MySQL 用户名和密码
mysql_user="root"
mysql_password="password"
# 执行数据库备份
mysqldump -u $mysql_user -p$mysql_password $database_name > $backup_file
4. MySQL 数据库备份多循环
#!/bin/bash
# 定义备份目录
backup_dir="/var/backups/mysql"
# 定义数据库列表
databases=("db1" "db2" "db3")
# 定义 MySQL 用户名和密码
mysql_user="root"
mysql_password="password"
# 创建备份目录
mkdir -p $backup_dir
# 循环备份每个数据库
for database in ${databases[@]}; do
backup_file="$backup_dir/$database.sql"
mysqldump -u $mysql_user -p$mysql_password $database > $backup_file
done
5. Nginx 访问日志按天切割
#!/bin/bash
# 定义日志文件路径
log_file="/var/log/nginx/access.log"
# 定义切割后的日志文件目录
rotated_logs_dir="/var/log/nginx/rotated"
# 定义切割频率(天)
rotation_interval=1
# 创建切割后的日志文件目录
mkdir -p $rotated_logs_dir
# 执行日志切割
find $log_file -mtime +$rotation_interval -exec mv {} $rotated_logs_dir \;
6. Nginx 访问日志按大小切割
#!/bin/bash
# 定义日志文件路径
log_file="/var/log/nginx/access.log"
# 定义切割后的日志文件目录
rotated_logs_dir="/var/log/nginx/rotated"
# 定义切割大小(MB)
rotation_size=10
# 创建切割后的日志文件目录
mkdir -p $rotated_logs_dir
# 执行日志切割
logrotate -f -s $log_file $rotated_logs_dir/access.log.$rotation_size.gz
7. Apache 日志切割
#!/bin/bash
# 定义日志文件路径
log_file="/var/log/apache2/access.log"
# 定义切割后的日志文件目录
rotated_logs_dir="/var/log/apache2/rotated"
# 定义切割频率(天)
rotation_interval=1
# 创建切割后的日志文件目录
mkdir -p $rotated_logs_dir
# 执行日志切割
find $log_file -mtime +$rotation_interval -exec mv {} $rotated_logs_dir \;
8. 自动清理旧备份脚本
#!/bin/bash
# 定义备份目录
backup_dir="/var/backups"
# 定义保留备份数量
retention_count=5
# 获取备份文件列表
backup_files=$(find $backup_dir -type f -name "*.gz" | sort -r)
# 删除多余的备份文件
for backup_file in $backup_files; do
if [[ $((${#backup_files[@]} - $retention_count)) -gt 0 ]]; then
rm $backup_file
fi
done
9. 发送电子邮件脚本
#!/bin/bash
# 定义邮件服务器地址
smtp_server="smtp.example.com"
# 定义发件人邮箱地址
sender_email="sender@example.com"
# 定义收件人邮箱地址
recipient_email="recipient@example.com"
# 定义邮件主题
subject="Important Message"
# 定义邮件正文
body="This is an important message."
# 发送邮件
echo "$body" | mail -s "$subject" -S smtp="$smtp_server" -f "$sender_email" "$recipient_email"