别再只会敲命令!Shell脚本实战:自动化运维+日志分析+文件管理

createh51周前 (06-29)技术教程4

别再只会敲命令!Shell脚本实战:自动化运维+日志分析+文件管理
--3个核心场景,5个实用脚本,彻底告别重复劳动!

为什么Shell脚本是运维/开发的“效率外挂”?

每天手动重启服务、盯着日志找错误、整理杂乱文件……是不是觉得像“人肉机器人”?
Shell脚本 能自动执行这些重复操作,还能精准处理海量数据!
本文目标

解决 自动化运维日志分析文件管理 三大高频痛点

直接复制代码,立刻应用到实际工作

学会用Shell替代90%的重复命令

一、自动化运维:让系统自己“打工”

1. 自动重启崩溃服务(守护进程神器)

需求:监控Nginx服务,意外停止时自动重启并记录日志。

bash
#!/bin/bash
# monitor_nginx.sh
SERVICE="nginx"
LOG="/var/log/nginx_monitor.log"

while true; do
    if ! systemctl is-active --quiet $SERVICE; then
        echo "$(date): $SERVICE 已停止,尝试重启..." >> $LOG
        systemctl restart $SERVICE
        echo "$(date): 重启完成" >> $LOG
    fi
    sleep 60  # 每分钟检查一次
done

2. 批量检查服务器存活(运维必备)

需求:检测10台服务器是否在线,失败时标记红色。

bash
#!/bin/bash
# check_servers.sh
SERVERS=("192.168.1.101" "192.168.1.102")  # 替换为你的服务器IP
for ip in "${SERVERS[@]}"; do
    if ping -c 1 $ip &> /dev/null; then
        echo -e "\033[32m$ip 在线\033[0m"
    else
        echo -e "\033[31m$ip 离线\033[0m"
    fi
done

二、日志分析:从海量数据中挖出关键信息

3. 实时监控错误日志(秒级报警)

需求:实时扫描日志文件,发现ERROR关键词立即发送邮件。

bash
#!/bin/bash
# log_monitor.sh
LOG_FILE="/var/log/app.log"
EMAIL="admin@example.com"

tail -f $LOG_FILE | while read line; do
    if echo $line | grep -q "ERROR"; then
        echo "发现错误日志:$line" | mail -s "紧急报警!" $EMAIL
    fi
done

4. 统计网站访问高峰时段(数据分析神技)

需求:分析Apache日志,找出访问量最大的时间段。

bash
#!/bin/bash
# traffic_analysis.sh
LOG_FILE="/var/log/apache2/access.log"

awk '{print $4}' $LOG_FILE | cut -d: -f2 | sort | uniq -c | sort -nr | head -n 5

三、文件管理:把杂乱文件夹变成“有序仓库”

5. 自动分类文件(按类型归档)

需求:将下载目录中的文件按类型分类到对应文件夹(文档、图片、压缩包)。

bash
#!/bin/bash
# auto_sort.sh
SOURCE="$HOME/Downloads"
DOC_DIR="$SOURCE/Documents"
IMG_DIR="$SOURCE/Images"
ARCHIVE_DIR="$SOURCE/Archives"

mkdir -p $DOC_DIR $IMG_DIR $ARCHIVE_DIR

for file in $SOURCE/*; do
    ext=${file##*.}
    case $ext in
        doc|pdf|txt) mv "$file" $DOC_DIR ;;
        jpg|png|gif) mv "$file" $IMG_DIR ;;
        zip|tar|gz) mv "$file" $ARCHIVE_DIR ;;
    esac
done

四、进阶技巧:让脚本更强大

  1. 参数化脚本:让用户自定义路径和阈值

bash

# 示例:通过参数指定监控目录 #!/bin/bash DIR=${1:-/tmp} # 如果未传参,默认使用/tmp find $DIR -type f -mtime +7 -delete

  1. 定时任务:用crontab定时执行脚本

bash

crontab -e # 每天凌晨2点清理临时文件 0 2 * * * /path/to/clean_temp.sh

  1. 日志轮转:防止日志文件过大

bash

# 使用logrotate配置每日切割日志 /var/log/app.log { daily rotate 7 compress missingok }

五、今日行动清单

复制auto_sort.sh脚本,整理你的下载文件夹!
用log_monitor.sh监控一个测试日志文件(如tail -f test.log)。
在评论区分享你最想解决的自动化难题(如自动备份数据库、定时群发邮件等)!

记住:Shell脚本是“懒人”的超能力!
无论是运维工程师、开发还是学生,掌握它能让你效率翻倍!
关注我,带你解锁更多编程硬核技能!

代码即生产力,让重复劳动成为历史!

相关文章

如何按天切割日志文件

简单明了,直接开始,给热爱编程的你我apache修改httpd.conf对以下两行进行调整ErrorLog "| /usr/local/apache/bin/rotatelogs /data/...

linux计划任务管理

1. crond计划任务概述2. crond配置文件详解3. crond计划任务管理4. crond配置编写实例5. crond计划任务调试1. crond计划任务概述什么是计划任务,计划任务类似于我...

Java面试题及答案总结(2025版持续更新)

大家好,我是Java面试分享最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Nginx、Kafka、Spring、Mysql、SpringBoot...

elkb实践经验,再赠送一套复杂的配置文件

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。宝剑锋从磨砺出,梅花香自苦寒来。诗人白居易,三月下江南,看到沿路开放的桃花,心潮澎湃,作下了这首流传千秋的诗。表现了诗人对美...

逆向工程 Cursor 的 LLM 客户端

Cursor 内部到底发生了什么?我们将TensorZero连接到 Cursor 和 LLM 之间,以查看每个令牌的飞过......并根据自己的意愿调整这些 API 调用。TensorZero 是一个...