还在为重复的效率系统操作、文件整理、飙升本告别重服务监控而头疼?个超Shell脚本就是你效率翻倍的秘密武器!今天分享7个简单易学的自动化脚本,覆盖备份、实用双手监控、复劳放清理、动解检查等高频场景,效率新手也能轻松上手,飙升本告别重让你的个超Linux/Unix运维管理瞬间起飞! 为什么你需要Shell脚本? 自动化重复工作: 把那些枯燥的命令行操作打包成脚本,一键执行!减少人为错误: 脚本严格执行预设步骤,实用双手避免手动操作的复劳放疏忽。提升工作效率: 把时间花在更有价值的动解事情上,而不是效率一遍遍敲命令。系统管理利器: 监控、飙升本告别重维护、个超部署,脚本都能帮你搞定。
 干货来袭!七个提升效率的Shell脚本: 1. 自动备份小能手:重要文件再也不怕丢!场景: 定期自动备份你的工作目录,压缩存档到备份位置(比如 /backups),文件名带上日期,清晰明了。 脚本代码: 复制#!/bin/bash # 定义你的亿华云重要文件夹和备份存放地 SOURCE_DIR="/home/yourname/important_stuff" # 👉 改成你的重要目录 BACKUP_DIR="/backups" # 👉 改成你的备份目录 DATE=$(date +%Y-%m-%d) # 获取今天的日期 (格式:年-月-日) # 创建压缩包备份 (tar.gz格式) tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR" # 告诉你备份完成啦! echo "[SUCCESS] Backup saved to: $BACKUP_DIR/backup_$DATE.tar.gz"1.2.3.4.5.6.7.8.9.10.11.12.关键点说明: tar -czf: 打包 (c) + 用gzip压缩 (z) + 指定文件名 (f)。生成的 .tar.gz 文件又小又好管理。date +%Y-%m-%d: 获取当前日期,让备份文件名字自带时间戳,方便查找历史版本。怎么用? 保存为 backup.sh,用 cron 定时任务设置每天/每周自动跑! 2. 磁盘空间守卫者:快满了?马上发警报!场景: 根分区 / 的使用率超过你设定的警戒线(比如90%),自动发邮件提醒管理员,避免磁盘爆满导致系统卡死。 脚本代码: 复制#!/bin/bash THRESHOLD=90 # 设置你的警戒线百分比 (90%) CURRENT_USAGE=$(df / | awk NR==2 {gsub("%","",$5); print $5}) # 提取根分区当前使用率数值 # 判断是否超过警戒线 if [ "$CURRENT_USAGE" -gt "$THRESHOLD" ]; then # 发送邮件报警 (需要提前配置好系统邮件发送功能) echo "WARNING! Disk usage on $(hostname) is at ${CURRENT_USAGE}%!" | mail -s "🚨 DISK SPACE ALERT! 🚨" admin@yourcompany.com # 👉 改成你的邮箱 fi1.2.3.4.5.6.7.8.9.10.关键点说明: df /: 查看根分区的磁盘使用情况。awk NR==2 {gsub("%","",$5); print $5}: 魔法在这里!提取 df 输出的第二行(数据行),去掉第五列(使用率)的 % 符号,只留下纯数字。mail -s: 发送邮件 (-s 指定主题)。 ⚠️注意:需要预先配置好 mailutils或sendmail等邮件服务。怎么用? 保存为 disk_alert.sh,用 cron 设置每5分钟或每小时检查一次。 3. 日志清洁工:自动清理陈年老日志!场景: 定期清理 /var/log 目录下那些超过30天的 .log 日志文件,释放宝贵磁盘空间。服务器租用 脚本代码: 复制#!/bin/bash # 查找并删除 /var/log 下超过30天的 .log 文件 find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \; echo "Old log files (>30 days) in /var/log have been cleaned up."1.2.3.4.5.6.关键点说明: find /var/log: 在 /var/log 目录下查找。-type f: 只找文件(不包括目录)。-name "*.log": 只找文件名以 .log 结尾的。-mtime +30: 只找修改时间在30天之前的文件。-exec rm -f {} \;: 对找到的每一个文件执行 rm -f(强制删除)命令。{} 代表找到的文件名。怎么用? 保存为 clean_logs.sh,用 cron 设置每周或每月跑一次。⚠️谨慎操作!确保路径和条件正确,避免误删。 4. 服务器健康检查员:一键 ping 所有机器!场景: 快速检查你管理的多台服务器或网络设备是否在线,状态一目了然。 脚本代码: 复制#!/bin/bash # 把你的服务器IP或域名放进这个列表 SERVERS=("192.168.1.100" "192.168.1.101" "db01.yourdomain.com" "web-server") # 👉 改成你的服务器 echo "= Starting Server Status Check =" for server in "${SERVERS[@]}"; do # Ping一次,静默执行(不显示输出),根据退出状态码判断 if ping -c 1 -W 2 "$server" &> /dev/null; then status="✅ UP" else status="❌ DOWN" fi echo "- $server: $status" done echo "= Check Complete ="1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.关键点说明: SERVERS=(...): 定义一个数组,里面放你要检查的所有服务器地址。for server in ...: 循环遍历数组中的每个服务器地址。ping -c 1 -W 2: 发送1个探测包 (-c 1),最多等待2秒 (-W 2)。&> /dev/null: 把命令的标准输出和错误输出都丢弃(不显示在屏幕上)。if ...; then ... else ... fi: 根据 ping 命令的免费源码下载退出状态码(0表示成功/在线,非0表示失败/离线)判断服务器状态,并输出带表情符号的结果。怎么用? 保存为 server_check.sh,需要检查时直接运行 ./server_check.sh。 5. 密码生成神器:高强度随机密码秒生成!场景: 快速生成一个包含大小写字母、数字和特殊符号的强密码(比如12位),用于账户注册或密钥设置。 脚本代码: 复制#!/bin/bash LENGTH=12 # 👉 设置你想要的密码长度 # 利用 /dev/urandom 生成随机字节,过滤出需要的字符集 PASSWORD=$(tr -dc A-Za-z0-9!@#$%^&*()_+-=[]{}|;:,.<>? < /dev/urandom | head -c "$LENGTH") echo "🔒 Your secure password: $PASSWORD"1.2.3.4.5.6.7.8.关键点说明: /dev/urandom: Linux系统的优质随机数源(足够用于生成密码)。tr -dc ...: -d 删除,-c 取反。意思是“删除所有不在指定字符集 A-Za-z0-9!@#$%^&*()_+-=[]{}|;:,.<>? 中的字符”。这样就只留下了我们想要的字符。head -c "$LENGTH": 取过滤后字符流的前 $LENGTH 个字符。怎么用? 保存为 gen_passwd.sh,需要密码时运行 ./gen_passwd.sh。⚠️注意:/dev/urandom在绝大多数Linux系统上安全,但生成极高安全要求的密钥对时,/dev/random或专用工具更佳。 6. DNS稳定性哨兵:实时监控域名解析!场景: 持续监测某个重要域名(如你的网站域名)的DNS解析是否正常。一旦解析失败(返回空结果),立即记录时间和错误信息到日志文件。 脚本代码: 复制#!/bin/bash DOMAIN="your-critical-domain.com" # 👉 改成你要监控的关键域名 LOG_FILE="dns_monitor.log" # 日志文件名 echo "Starting DNS monitoring for $DOMAIN. Press Ctrl+C to stop. Logs in $LOG_FILE" while true; do # 无限循环 # 尝试解析域名,只取最简短的IP输出 RESULT=$(dig +short "$DOMAIN" 2> /dev/null) # 如果解析结果为空字符串 if [ -z "$RESULT" ]; then echo "[ERROR][$(date +%Y-%m-%d %H:%M:%S)] DNS resolution FAILED for $DOMAIN!" >> "$LOG_FILE" fi sleep 5 # 每5秒检查一次 (👉 根据需要调整间隔) done1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.关键点说明: dig +short: 使用 dig 工具进行DNS查询,+short 参数让它只输出最核心的解析结果(通常是IP地址),简洁明了。[ -z "$RESULT" ]: 检查变量 RESULT 是否为空字符串 (-z)。空字符串意味着 dig 没有返回有效的解析结果(DNS失败)。>>"$LOG_FILE": 将错误信息追加 (>>) 到日志文件末尾。while true; do ... sleep 5; done: 创建一个无限循环,每循环一次休眠5秒,实现持续监控。按 Ctrl+C 停止。怎么用? 保存为 dns_watchdog.sh,后台运行 (nohup ./dns_watchdog.sh &)。出现问题就查 dns_monitor.log。 7. 网站健康检测仪:HTTP状态码实时追踪!场景: 持续检查你的网站或API服务是否可用。每次检查都记录时间、目标URL和HTTP状态码(200表示成功,其他如404/500表示有问题)到日志文件。 脚本代码: 复制#!/bin/bash URL="https://your-website.com/api/health" # 👉 改成你要监控的URL LOG_FILE="http_health.log" # 日志文件名 CHECK_INTERVAL=10 # 检查间隔(秒) 👉 调整 echo "Monitoring HTTP status of $URL. Press Ctrl+C to stop. Logs in $LOG_FILE" while true; do # 获取HTTP状态码 (静默访问,只输出状态码) STATUS_CODE=$(curl -o /dev/null -s -w "%{http_code}" "$URL") # 记录到日志 (带上时间戳) TIMESTAMP=$(date +%Y-%m-%d %H:%M:%S) if [ "$STATUS_CODE" -eq 200 ]; then echo "[OK][$TIMESTAMP] $URL - Status: $STATUS_CODE" >> "$LOG_FILE" else echo "[PROBLEM][$TIMESTAMP] $URL - Status: $STATUS_CODE" >> "$LOG_FILE" fi sleep "$CHECK_INTERVAL" done1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.关键点说明: (1) curl -o /dev/null -s -w "%{http_code}": -o /dev/null: 把访问到的网页内容丢弃(不保存也不显示)。-s: 静默模式(不显示进度条或错误信息)。-w "%{http_code}": 告诉 curl 在访问结束后,只输出 HTTP 响应状态码(如 200, 404, 500, 503 等)。(2) [ "$STATUS_CODE" -eq 200 ]: 判断获取到的状态码是否等于200 (OK)。 (3) 日志清晰区分了成功 ([OK]) 和其他状态 ([PROBLEM]),方便后续分析排查。 怎么用? 保存为 http_monitor.sh,后台运行 (nohup ./http_monitor.sh &)。定期查看 http_health.log 或设置报警(当非200状态出现时)。 总结这7个脚本只是Shell自动化能力的冰山一角!它们展示了如何用简洁的代码解决日常运维中的痛点. 动手试试吧! 将脚本保存为 .sh 文件 (如 my_backup.sh)。用 chmod +x my_backup.sh 赋予执行权限。根据需要修改脚本里的路径、阈值、邮箱、URL等参数。直接运行 ./my_backup.sh 测试效果。使用 cron (定时任务) 或 nohup (后台运行) 实现自动化!小贴士: 操作重要文件前,先在小范围或测试环境验证脚本!善用 cron 定时任务 (crontab -e 编辑),让脚本在指定时间自动运行。遇到问题?echo 打印变量或使用 bash -x script.sh 调试是王道! |