首页 抖音热门文章正文

10个Linux运维神器脚本,助你事半功倍,赶紧收藏!

抖音热门 2025年09月24日 17:50 2 admin

作为一名Linux运维工程师,日常工作中总会遇到各种重复性任务:监控服务器性能、清理日志、批量处理文件、检查系统状态……如果每次都手动操作,不仅效率低下,还容易出错。这时,脚本就成了运维人员的“救命稻草”。一个好的脚本能帮你节省时间、降低错误率,甚至在关键时刻化险为夷。今天,我将分享10个Linux运维中超实用的脚本,涵盖监控、日志管理、备份、进程管理等场景。这些脚本简单易用、功能强大,绝对值得你收藏!

10个Linux运维神器脚本,助你事半功倍,赶紧收藏!

1. 服务器性能监控脚本

运维的日常离不开对服务器性能的监控,比如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"

使用方法

  1. 保存为monitor.sh,赋予执行权限:chmod +x monitor.sh
  2. 运行:./monitor.sh
  3. 可结合crontab定时运行,例如每5分钟记录一次:*/5 * * * * /path/to/monitor.sh >> /var/log/system_monitor.log

场景:快速排查服务器性能瓶颈,适合初学者或需要临时检查的场景。


2. 日志清理脚本

日志文件占满磁盘是运维中常见的问题。这个脚本可以自动清理指定目录下超过一定天数的日志文件。

#!/bin/bashLOG_DIR="/var/log/app"DAYS=7# 查找并删除超过指定天数的日志文件find $LOG_DIR -name "*.log" -mtime +$DAYS -exec rm -f {} \;# 输出清理结果echo "已清理 $LOG_DIR 目录下 $DAYS 天前的日志文件"

使用方法

  1. 修改LOG_DIR为你的日志目录,DAYS为保留天数。
  2. 保存为clear_log.sh,赋予执行权限。
  3. 运行或加入crontab,如每天凌晨执行:0 0 * * * /path/to/clear_log.sh

场景:防止日志文件堆积导致磁盘满,适合Web服务器、数据库等场景。


3. 自动备份脚本

数据备份是运维的生命线。这个脚本可以备份指定目录到目标路径,并压缩以节省空间。

#!/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"

使用方法

  1. 修改SRC_DIRBACKUP_DIR为实际路径。
  2. 保存为backup.sh,赋予执行权限。
  3. 加入crontab,如每天凌晨2点备份:0 2 * * * /path/to/backup.sh

场景:数据库、配置文件或重要目录的定期备份。


4. 批量检查服务状态

需要快速检查多个服务的运行状态?这个脚本可以批量检查指定服务的状态。

#!/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

使用方法

  1. 修改SERVICES数组,填入需要检查的服务名称。
  2. 保存为check_service.sh,赋予执行权限。
  3. 运行或加入crontab定时检查。

场景:监控关键服务(如Nginx、MySQL),自动尝试重启。


5. 批量文件重命名

文件批量重命名在处理日志、备份文件时非常实用。这个脚本可以给指定目录下的文件添加前缀。

#!/bin/bashDIR="/path/to/files"PREFIX="backup_"for FILE in $DIR/*; do    if [ -f "$FILE" ]; then        mv "$FILE" "$DIR/$PREFIX$(basename $FILE)"    fidoneecho "文件重命名完成!"

使用方法

  1. 修改DIRPREFIX
  2. 保存为rename_files.sh,赋予执行权限。
  3. 运行:./rename_files.sh

场景:批量整理文件名,适合日志归档、数据迁移等。


6. 磁盘空间告警脚本

磁盘空间不足可能导致服务宕机。这个脚本监控磁盘使用率,超过阈值时发送邮件告警。

#!/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

使用方法

  1. 修改THRESHOLDEMAIL
  2. 确保服务器已配置邮件服务(如postfix)。
  3. 保存为disk_alert.sh,加入crontab定时运行。

场景:监控关键分区,及时发现磁盘空间问题。


7. 批量杀死僵尸进程

僵尸进程会占用系统资源,这个脚本可以批量清理。

#!/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

使用方法

  1. 保存为kill_zombies.sh,赋予执行权限。
  2. 运行:./kill_zombies.sh

场景:清理长期运行的服务器上的僵尸进程。


8. 批量修改文件权限

批量修改文件权限在多用户环境下很常见。这个脚本可以递归修改指定目录的权限。

#!/bin/bashDIR="/var/www/html"PERMISSION="755"chmod -R $PERMISSION $DIRecho "已将 $DIR 目录权限设置为 $PERMISSION"

使用方法

  1. 修改DIRPERMISSION
  2. 保存为chmod_files.sh,赋予执行权限。
  3. 运行:./chmod_files.sh

场景:Web服务器文件权限统一调整。


9. 网络连接统计脚本

了解服务器的网络连接状态对排查问题至关重要。这个脚本统计TCP连接状态。

#!/bin/bashnetstat -ant | awk '/^tcp/ {print $6}' | sort | uniq -c | sort -nr

使用方法

  1. 保存为netstat.sh,赋予执行权限。
  2. 运行:./netstat.sh

场景:排查网络瓶颈,分析连接状态。


10. 自动同步时间

服务器时间不同步可能导致日志混乱或服务异常。这个脚本确保系统时间与NTP服务器同步。

#!/bin/bashntpdate pool.ntp.orgif [ $? -eq 0 ]; then    echo "时间同步成功: $(date)"else    echo "时间同步失败,请检查网络或NTP服务"fi

使用方法

  1. 确保安装ntpdateyum install ntpapt install ntp)。
  2. 保存为sync_time.sh,赋予执行权限。
  3. 加入crontab,如每天同步:0 0 * * * /path/to/sync_time.sh

场景:保证分布式系统时间一致性。

发表评论

长征号 Copyright © 2013-2024 长征号. All Rights Reserved.  sitemap