Linux复杂脚本案例
在企业运营中,Linux 脚本通常用于自动化复杂任务、监控系统、处理数据、部署服务等。以下是一些常见的复杂场景和相关的 Linux 脚本命令或技术,通常结合多种工具和编程逻辑实现:
1. 日志分析与处理
复杂命令组合:
# 分析 Nginx 日志,统计每小时请求量最多的前 10 个 IP awk -F'[: ]' '{print $1,$5}' /var/log/nginx/access.log | \ awk '{count[$2" "$3]++} END {for (ip in count) print count[ip], ip}' | \ sort -nr | head -n 10 # 使用 sed 和 awk 提取特定时间段的错误日志 sed -n '/2023-10-01 00:00:00/,/2023-10-01 23:59:59/p' /var/log/app/error.log | \ awk '/ERROR/ {print $5}' | sort | uniq -c
- 工具:
grep
,awk
,sed
,cut
,sort
,uniq
- 场景:日志清洗、异常检测、流量统计。
- 工具:
2. 自动化备份与恢复
复杂脚本片段:
# 增量备份数据库并上传到远程服务器,保留 7 天历史 BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d) mysqldump -u root -pPASSWORD dbname | gzip > $BACKUP_DIR/dbname_$DATE.sql.gz find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -exec rm {} \; rsync -avz --delete $BACKUP_DIR/ user@remote:/backup/mysql/
- 工具:
cron
(定时任务)、tar
、rsync
、scp
、mysqldump
- 场景:数据库备份、文件同步、版本回滚。
- 工具:
3. 系统监控与告警
脚本示例:
# 监控 CPU 使用率并发送邮件告警 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') if (( $(echo "$CPU_USAGE > 90" | bc -l) )); then echo "CPU 使用率过高: $CPU_USAGE%" | mail -s "服务器告警" admin@example.com fi # 使用 Prometheus + Grafana 的脚本化集成(通过 API) curl -X POST http://prometheus:9090/api/v1/query --data-urlencode 'query=up{job="web-server"}'
- 工具:
top
,vmstat
,iostat
,mail
,curl
- 场景:资源监控、服务健康检查、自动化告警。
- 工具:
4. 批量文件操作
复杂命令:
# 批量重命名文件(将 .txt 后缀改为 .md) find /path/to/files -name "*.txt" -exec sh -c 'mv "$1" "${1%.txt}.md"' _ {} \; # 批量压缩并删除原始文件 find /data/logs -name "*.log" -size +100M -exec gzip {} \;
- 工具:
find
,xargs
,rename
,sed
(结合正则表达式)。
- 工具:
5. 网络管理与 API 调用
脚本示例:
# 自动封禁频繁访问的 IP(结合 iptables) tail -f /var/log/nginx/access.log | \ awk '{print $1}' | \ sort | uniq -c | \ awk '{if ($1 > 100) print "iptables -A INPUT -s " $2 " -j DROP"}' # 调用 REST API 并解析 JSON 响应 response=$(curl -s https://api.example.com/data) echo $response | jq '.status'
- 工具:
iptables
,curl
,jq
,nmap
(端口扫描)。
- 工具:
6. 数据库自动化操作
脚本示例:
# 自动清理过期数据库记录 mysql -u user -pPASSWORD -e "DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;" # 导出 CSV 并发送邮件 mysql -u user -pPASSWORD -e "SELECT * FROM sales" | sed 's/\t/,/g' > sales.csv echo "月度销售数据" | mail -a sales.csv -s "报表" finance@example.com
7. 自动化部署与 CI/CD
脚本示例:
# 使用 Ansible 或 Shell 脚本部署代码 git pull origin master docker-compose down docker-compose up -d --build
8. 安全审计与漏洞扫描
复杂命令:
# 扫描系统中 SUID/SGID 权限异常的文件 find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; # 检查 SSH 登录失败记录 grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c
9. 数据处理与报告生成
复杂命令:
# 从 CSV 中提取数据并生成汇总报告 awk -F',' '{sum+=$3} END {print "总销售额: " sum}' sales.csv # 使用 Python 脚本 + Shell 定时生成报表 python3 generate_report.py && mv report.pdf /var/www/html/
10. 资源清理与维护
脚本示例:
# 清理 /tmp 中超过 7 天未使用的文件 find /tmp -type f -atime +7 -exec rm -f {} \; # 自动扩展磁盘分区(结合 LVM) lvextend -l +100%FREE /dev/vg01/lv01 resize2fs /dev/vg01/lv01
复杂脚本的核心特点
- 组合性:通过管道符
|
和重定向>
串联多个命令。 - 条件判断:使用
if
、case
、&&
/||
控制流程。 - 循环处理:
for
、while
循环遍历文件或数据。 - 函数封装:将重复逻辑封装为函数。
- 外部工具集成:结合
jq
(JSON 处理)、awk
(文本分析)、curl
(API 调用)等。
学习建议
- 掌握
awk
和sed
:它们是文本处理的瑞士军刀。 - 学习正则表达式:用于高效匹配和替换文本。
- 熟悉
cron
:实现定时任务自动化。 - 使用版本控制(如 Git):管理复杂脚本的迭代。
企业中的复杂脚本通常是为特定场景定制的,核心目标是 提升效率、减少人为错误。