Linux复杂脚本案例

这篇文章上次修改于 5 个月前,可能部分内容已经不适用,如有疑问可询问作者。

Linux复杂脚本案例

在企业运营中,Linux 脚本通常用于自动化复杂任务、监控系统、处理数据、部署服务等。以下是一些常见的复杂场景和相关的 Linux 脚本命令或技术,通常结合多种工具和编程逻辑实现:


1. 日志分析与处理

  • 复杂命令组合:

    BASH
    # 分析 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
    Copy
    • 工具:grep, awk, sed, cut, sort, uniq
    • 场景:日志清洗、异常检测、流量统计。

2. 自动化备份与恢复

  • 复杂脚本片段:

    BASH
    # 增量备份数据库并上传到远程服务器,保留 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/
    Copy
    • 工具:cron(定时任务)、tar、rsync、scp、mysqldump
    • 场景:数据库备份、文件同步、版本回滚。

3. 系统监控与告警

  • 脚本示例:

    BASH
    # 监控 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"}'
    Copy
    • 工具:top, vmstat, iostat, mail, curl
    • 场景:资源监控、服务健康检查、自动化告警。

4. 批量文件操作

  • 复杂命令:

    BASH
    # 批量重命名文件(将 .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 {} \;
    Copy
    • 工具:find, xargs, rename, sed(结合正则表达式)。

5. 网络管理与 API 调用

  • 脚本示例:

    BASH
    # 自动封禁频繁访问的 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'
    Copy
    • 工具:iptables, curl, jq, nmap(端口扫描)。

6. 数据库自动化操作

  • 脚本示例:

    BASH
    # 自动清理过期数据库记录
    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
    Copy

7. 自动化部署与 CI/CD

  • 脚本示例:

    BASH
    # 使用 Ansible 或 Shell 脚本部署代码
    
    git pull origin master
    
    docker-compose down
    
    docker-compose up -d --build
    Copy

8. 安全审计与漏洞扫描

  • 复杂命令:

    BASH
    # 扫描系统中 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
    Copy

9. 数据处理与报告生成

  • 复杂命令:

    BASH
    # 从 CSV 中提取数据并生成汇总报告
    
    awk -F',' '{sum+=$3} END {print "总销售额: " sum}' sales.csv
    
    # 使用 Python 脚本 + Shell 定时生成报表
    
    python3 generate_report.py && mv report.pdf /var/www/html/
    Copy

10. 资源清理与维护

  • 脚本示例:

    BASH
    # 清理 /tmp 中超过 7 天未使用的文件
    
    find /tmp -type f -atime +7 -exec rm -f {} \;
    
    # 自动扩展磁盘分区(结合 LVM)
    
    lvextend -l +100%FREE /dev/vg01/lv01
    
    resize2fs /dev/vg01/lv01
    Copy

复杂脚本的核心特点

  1. 组合性:通过管道符 | 和重定向 > 串联多个命令。
  2. 条件判断:使用 if、case、&&/|| 控制流程。
  3. 循环处理:for、while 循环遍历文件或数据。
  4. 函数封装:将重复逻辑封装为函数。
  5. 外部工具集成:结合 jq(JSON 处理)、awk(文本分析)、curl(API 调用)等。

学习建议

  • 掌握 awk 和 sed:它们是文本处理的瑞士军刀。
  • 学习正则表达式:用于高效匹配和替换文本。
  • 熟悉 cron:实现定时任务自动化。
  • 使用版本控制(如 Git):管理复杂脚本的迭代。

企业中的复杂脚本通常是为特定场景定制的,核心目标是 提升效率、减少人为错误。