别再只会敲命令!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
四、进阶技巧:让脚本更强大
- 参数化脚本:让用户自定义路径和阈值
bash
# 示例:通过参数指定监控目录 #!/bin/bash DIR=${1:-/tmp} # 如果未传参,默认使用/tmp find $DIR -type f -mtime +7 -delete
- 定时任务:用crontab定时执行脚本
bash
crontab -e # 每天凌晨2点清理临时文件 0 2 * * * /path/to/clean_temp.sh
- 日志轮转:防止日志文件过大
bash
# 使用logrotate配置每日切割日志 /var/log/app.log { daily rotate 7 compress missingok }
五、今日行动清单
复制auto_sort.sh脚本,整理你的下载文件夹!
用log_monitor.sh监控一个测试日志文件(如tail -f test.log)。
在评论区分享你最想解决的自动化难题(如自动备份数据库、定时群发邮件等)!
记住:Shell脚本是“懒人”的超能力!
无论是运维工程师、开发还是学生,掌握它能让你效率翻倍!
关注我,带你解锁更多编程硬核技能!
代码即生产力,让重复劳动成为历史!