摘要:作为一名Linux运维工程师,日常工作中总会遇到各种重复性任务:监控服务器性能、清理日志、批量处理文件、检查系统状态……如果每次都手动操作,不仅效率低下,还容易出错。这时,脚本就成了运维人员的“救命稻草”。一个好的脚本能帮你节省时间、降低错误率,甚至在关键时刻
作为一名Linux运维工程师,日常工作中总会遇到各种重复性任务:监控服务器性能、清理日志、批量处理文件、检查系统状态……如果每次都手动操作,不仅效率低下,还容易出错。这时,脚本就成了运维人员的“救命稻草”。一个好的脚本能帮你节省时间、降低错误率,甚至在关键时刻化险为夷。今天,我将分享10个Linux运维中超实用的脚本,涵盖监控、日志管理、备份、进程管理等场景。这些脚本简单易用、功能强大,绝对值得你收藏!
运维的日常离不开对服务器性能的监控,比如CPU、内存、磁盘使用率等。
这个脚本可以快速获取系统资源使用情况,并以清晰的格式输出。
#!/bin/bash# 获取当前时间TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')# CPU使用率(前1分钟平均负载)LOADAVG=$(uptime | awk '{print $10,$11,$12}')# 内存使用情况MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')MEM_USED=$(free -m | awk '/Mem:/ {print $3}')MEM_USAGE_PERCENT=$((MEM_USED * 100 / MEM_TOTAL))# 磁盘使用情况DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}')# 输出结果echo "===== 系统性能监控 ($TIMESTAMP) ====="echo "CPU负载 (1min, 5min, 15min): $LOADAVG"echo "内存使用率: $MEM_USAGE_PERCENT% ($MEM_USED/$MEM_TOTAL MB)"echo "根分区磁盘使用率: $DISK_USAGE"使用方法:
保存为monitor.sh,赋予执行权限:chmod +x monitor.sh。运行:./monitor.sh。可结合crontab定时运行,例如每5分钟记录一次:*/5 * * * * /path/to/monitor.sh >> /var/log/system_monitor.log。场景:快速排查服务器性能瓶颈,适合初学者或需要临时检查的场景。
日志文件占满磁盘是运维中常见的问题。这个脚本可以自动清理指定目录下超过一定天数的日志文件。
#!/bin/bashLOG_DIR="/var/log/app"DAYS=7# 查找并删除超过指定天数的日志文件find $LOG_DIR -name "*.log" -mtime +$DAYS -exec rm -f {} \;# 输出清理结果echo "已清理 $LOG_DIR 目录下 $DAYS 天前的日志文件"使用方法:
修改LOG_DIR为你的日志目录,DAYS为保留天数。保存为clear_log.sh,赋予执行权限。运行或加入crontab,如每天凌晨执行:0 0 * * * /path/to/clear_log.sh。场景:防止日志文件堆积导致磁盘满,适合Web服务器、数据库等场景。
数据备份是运维的生命线。这个脚本可以备份指定目录到目标路径,并压缩以节省空间。
#!/bin/bashSRC_DIR="/data"BACKUP_DIR="/backup"DATE=$(date '+%Y%m%d_%H%M%S')BACKUP_FILE="backup_$DATE.tar.gz"# 创建备份目录mkdir -p $BACKUP_DIR# 压缩备份tar -zcf $BACKUP_DIR/$BACKUP_FILE $SRC_DIR# 删除30天前的备份find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +30 -exec rm -f {} \;echo "备份完成: $BACKUP_DIR/$BACKUP_FILE"使用方法:
修改SRC_DIR和BACKUP_DIR为实际路径。保存为backup.sh,赋予执行权限。加入crontab,如每天凌晨2点备份:0 2 * * * /path/to/backup.sh。场景:数据库、配置文件或重要目录的定期备份。
需要快速检查多个服务的运行状态?这个脚本可以批量检查指定服务的状态。
#!/bin/bashSERVICES=("Nginx" "MySQL" "redis")for SERVICE in "${SERVICES[@]}"; do systemctl is-active --quiet $SERVICE if [ $? -eq 0 ]; then echo "$SERVICE 正在运行" else echo "$SERVICE 未运行,尝试重启..." systemctl restart $SERVICE if [ $? -eq 0 ]; then echo "$SERVICE 重启成功" else echo "$SERVICE 重启失败,请检查!" fi fidone使用方法:
修改SERVICES数组,填入需要检查的服务名称。保存为check_service.sh,赋予执行权限。运行或加入crontab定时检查。场景:监控关键服务(如Nginx、MySQL),自动尝试重启。
文件批量重命名在处理日志、备份文件时非常实用。这个脚本可以给指定目录下的文件添加前缀。
#!/bin/bashDIR="/path/to/files"PREFIX="backup_"for FILE in $DIR/*; do if [ -f "$FILE" ]; then mv "$FILE" "$DIR/$PREFIX$(basename $FILE)" fidoneecho "文件重命名完成!"使用方法:
修改DIR和PREFIX。保存为rename_files.sh,赋予执行权限。运行:./rename_files.sh。场景:批量整理文件名,适合日志归档、数据迁移等。
磁盘空间不足可能导致服务宕机。这个脚本监控磁盘使用率,超过阈值时发送邮件告警。
#!/bin/bashTHRESHOLD=80EMAIL="admin@example.com"DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $DISK_USAGE -gt $THRESHOLD ]; then echo "警告:磁盘使用率达到 $DISK_USAGE%!" | mail -s "磁盘空间告警" $EMAILfi使用方法:
修改THRESHOLD和EMAIL。确保服务器已配置邮件服务(如postfix)。保存为disk_alert.sh,加入crontab定时运行。场景:监控关键分区,及时发现磁盘空间问题。
僵尸进程会占用系统资源,这个脚本可以批量清理。
#!/bin/bashZOMBIES=$(ps aux | grep ' Z ' | awk '{print $2}')if [ -z "$ZOMBIES" ]; then echo "未发现僵尸进程"else for PID in $ZOMBIES; do kill -9 $PID echo "已杀死僵尸进程: $PID" donefi使用方法:
保存为kill_zombies.sh,赋予执行权限。运行:./kill_zombies.sh。场景:清理长期运行的服务器上的僵尸进程。
批量修改文件权限在多用户环境下很常见。这个脚本可以递归修改指定目录的权限。
#!/bin/bashDIR="/var/www/html"PERMISSION="755"chmod -R $PERMISSION $DIRecho "已将 $DIR 目录权限设置为 $PERMISSION"使用方法:
修改DIR和PERMISSION。保存为chmod_files.sh,赋予执行权限。运行:./chmod_files.sh。场景:Web服务器文件权限统一调整。
了解服务器的网络连接状态对排查问题至关重要。这个脚本统计TCP连接状态。
#!/bin/bashnetstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c | sort -nr使用方法:
保存为netstat.sh,赋予执行权限。运行:./netstat.sh。场景:排查网络瓶颈,分析连接状态。
服务器时间不同步可能导致日志混乱或服务异常。这个脚本确保系统时间与ntp服务器同步。
#!/bin/bashNTPdate pool.ntp.orgif [ $? -eq 0 ]; then echo "时间同步成功: $(date)"else echo "时间同步失败,请检查网络或NTP服务"fi使用方法:
确保安装ntpdate(yum install ntp或apt install ntp)。保存为sync_time.sh,赋予执行权限。加入crontab,如每天同步:0 0 * * * /path/to/sync_time.sh。场景:保证分布式系统时间一致性。
来源:wljslmz一点号