当前位置:首页>Linux>Linux运维常用脚本:提升效率的自动化利器

Linux运维常用脚本:提升效率的自动化利器

  • 2026-10-11 05:40:01
Linux运维常用脚本:提升效率的自动化利器

整理运维工作中最实用的自动化脚本,让重复工作一键完成。

在Linux运维工作中,善用脚本可以极大提升效率。本文整理了运维工作中最常用的脚本示例,覆盖日志清理、备份、监控、系统检查等场景,拿来即用。

PART 01
日志管理脚本

1. 自动清理过期日志

日志文件占用过多磁盘空间是常见问题,通过脚本自动清理可有效避免。

#!/bin/bash# auto_clean_logs.sh - 清理指定目录下N天前的日志文件LOG_DIR="/var/log/myapp"DAYS=30find $LOG_DIR -name "*.log" -type f -mtime +$DAYS -exec rm -f {} \;echo "$(date): Cleaned logs older than $DAYS days in $LOG_DIR" >> /var/log/cleanup.log

2. 日志压缩归档

将7天前的日志压缩归档,节省空间的同时保留历史数据。

#!/bin/bash# archive_logs.sh - 压缩归档7天前的日志LOG_DIR="/var/log/myapp"ARCHIVE_DIR="/backup/logs"DAYS=7mkdir -p $ARCHIVE_DIRfind $LOG_DIR -name "*.log" -type f -mtime +$DAYS -exec gzip {} \;find $LOG_DIR -name "*.log.gz" -type f -mtime +$DAYS -exec mv {} $ARCHIVE_DIR \;echo "$(date): Archived logs older than $DAYS days" >> /var/log/archive.log
PART 02
备份脚本

3. 数据库备份脚本(MySQL)

#!/bin/bash# mysql_backup.sh - MySQL数据库备份DB_NAME="production_db"DB_USER="root"DB_PASS="your_password"BACKUP_DIR="/backup/mysql"DATE=$(date +%Y%m%d_%H%M%S)KEEP_DAYS=7mkdir -p $BACKUP_DIRmysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz# 删除7天前的备份find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +$KEEP_DAYS -deleteecho "$(date): MySQL backup completed: ${DB_NAME}_${DATE}.sql.gz"

4. 目录增量备份(rsync)

使用rsync实现增量备份,高效且节省空间。

#!/bin/bash# rsync_backup.sh - 使用rsync进行增量备份SOURCE_DIR="/data/"BACKUP_DIR="/backup/data/"EXCLUDE_FILE="/backup/exclude.list"# 排除文件列表示例# *.tmp# cache/# logs/*.logrsync -avz --delete --exclude-from=$EXCLUDE_FILE $SOURCE_DIR $BACKUP_DIRecho "$(date): Rsync backup completed" >> /var/log/backup.log
PART 03
系统监控脚本

5. 服务器健康检查

#!/bin/bash# health_check.sh - 服务器健康状态检查echo "========== 服务器健康检查报告 =========="echo "检查时间: $(date)"echo ""# CPU负载echo "--- CPU负载 ---"load_avg=$(uptime | awk -F'load average:' '{print $2}')echo "负载均值: $load_avg"echo ""# 内存使用echo "--- 内存使用 ---"free -h | grep -E "Mem|Swap"echo ""# 磁盘使用echo "--- 磁盘使用 ---"df -h | grep -v tmpfs | grep -v udevecho ""# 系统运行时间echo "--- 系统运行时间 ---"uptime -pecho ""# 最近登录echo "--- 最近登录用户 ---"last -n 5 | grep -v "^$"echo ""# 检查关键服务echo "--- 关键服务状态 ---"services=("nginx" "mysql" "ssh")for svc in "${services[@]}"; do    if systemctl is-active --quiet $svc; then        echo "$svc: ✓ 运行中"    else        echo "$svc: ✗ 已停止"    fidone

6. 磁盘使用率告警脚本

#!/bin/bash# disk_alert.sh - 磁盘空间告警THRESHOLD=80EMAIL="admin@example.com"WARN_FILE="/tmp/disk_warn.txt"df -h | grep -v tmpfs | grep -v udev | while read line; do    usage=$(echo $line | awk '{print $5}' | sed 's/%//')    mount=$(echo $line | awk '{print $6}')    if [ $usage -gt $THRESHOLD ]; then        echo "警告: 分区 $mount 使用率已达 $usage% (阈值: $THRESHOLD%)" >> $WARN_FILE    fidoneif [ -s $WARN_FILE ]; then    cat $WARN_FILE | mail -s "磁盘空间告警" $EMAIL    rm -f $WARN_FILEfi

7. 端口连通性检查

#!/bin/bash# port_check.sh - 检查服务端口是否正常HOST="localhost"PORTS=("80" "443" "3306" "6379")for port in "${PORTS[@]}"; do    nc -zv $HOST $port &> /dev/null    if [ $? -eq 0 ]; then        echo "✓ 端口 $port 正常"    else        echo "✗ 端口 $port 异常"    fidone
PART 04
系统维护脚本

8. 定时清理内存缓存

#!/bin/bash# clear_cache.sh - 清理系统内存缓存# 同步磁盘数据sync# 清理页缓存、目录项和inodeecho 3 > /proc/sys/vm/drop_cachesecho "$(date): System cache cleared" >> /var/log/cache_clean.log

9. 批量修改文件权限

#!/bin/bash# fix_permissions.sh - 批量修复文件权限WEB_DIR="/var/www/html"# 目录755,文件644find $WEB_DIR -type d -exec chmod 755 {} \;find $WEB_DIR -type f -exec chmod 644 {} \;# 特定目录开放写入权限chmod 775 $WEB_DIR/uploadschmod 775 $WEB_DIR/cacheecho "$(date): Permissions fixed for $WEB_DIR"

10. 查找并清理大文件

#!/bin/bash# find_large_files.sh - 查找并清理大文件SEARCH_DIR="/"SIZE="+500M"LOG_FILE="/tmp/large_files.log"echo "正在查找大于500MB的文件..."find $SEARCH_DIR -type f -size $SIZE -exec ls -lh {} \; | tee $LOG_FILEecho "查找到以下大文件,请确认后删除:"cat $LOG_FILE# 如需自动删除,取消下面注释(慎用!)# find $SEARCH_DIR -type f -size $SIZE -exec rm -f {} \;
PART 05
用户管理脚本

11. 批量创建用户

#!/bin/bash# batch_create_users.sh - 批量创建用户USER_FILE="user_list.txt"# user_list.txt 格式: username:password:group# 例如: zhangsan:123456:developerswhile IFS=':' read -r username password group; do    if [ -z "$username" ]; then        continue    fi    # 创建用户组(如果不存在)    if [ -n "$group" ]; then        groupadd $group 2>/dev/null        useradd -m -g $group -s /bin/bash $username    else        useradd -m -s /bin/bash $username    fi    # 设置密码    echo "$username:$password" | chpasswd    echo "用户 $username 创建成功"done < $USER_FILE
PART 06
定时任务配置

12. Crontab配置示例

将脚本加入定时任务实现自动化运维。

# 编辑crontabcrontab -e# 配置示例# 每天凌晨2点清理日志0 2 * * * /opt/scripts/auto_clean_logs.sh# 每天凌晨3点数据库备份0 3 * * * /opt/scripts/mysql_backup.sh# 每5分钟检查磁盘使用率*/5 * * * * /opt/scripts/disk_alert.sh# 每周日凌晨4点系统健康检查0 4 * * 0 /opt/scripts/health_check.sh > /var/log/health_weekly.log# 每月1号清理缓存0 5 1 * * /opt/scripts/clear_cache.sh
PART 07
应急运维脚本

13. 快速定位高CPU进程

#!/bin/bash# top_cpu.sh - 快速定位高CPU消耗进程echo "=== TOP 10 CPU消耗进程 ==="ps aux --sort=-%cpu | head -11

14. 批量停止指定服务

#!/bin/bash# stop_services.sh - 批量停止服务services=("tomcat" "nginx" "redis")for svc in "${services[@]}"; do    systemctl stop $svc    if [ $? -eq 0 ]; then        echo "$svc 已停止"    else        echo "$svc 停止失败"    fidone
实用脚本技巧
  1. 添加执行权限:chmod +x script.sh

  2. 调试模式:bash -x script.sh 查看详细执行过程

  3. 日志记录:./script.sh >> /var/log/script.log 2>&1

  4. 参数传递:使用 $1、$2 接收命令行参数

  5. 错误处理:使用 set -e 遇错即停,set -u 未定义变量报错

掌握这些脚本,能让日常运维工作事半功倍。建议根据实际需求定制修改,逐步积累属于自己的脚本库。

好课推荐
红帽认证-RHCE \ RHCA    
红帽认证是全球公认的 Linux 权威认证,也是国内企业招聘 Linux 运维、云计算、容器、大数据工程师时,最常标注的 “优先条件”,甚至很多企业将 RHCE/RHCA 作为入职的基础技能要求。

认准红帽官方授权  

微思-红帽官方授权合作伙伴!

— Linux文章推荐 —

【资料领取】200个Linux常用命令手册

《鸟哥Linux私房菜》全新完整中文版PDF

RHCE 证书价值解析:薪资水平与热门招聘企业分析

linux运维必备,100道常见面试题

超强linux学习笔记,值得一看(附PDF下载)

红红帽认证、麒麟认证与 K8S 该如何选择?

5 种 Linux 安装包管理工具中文手册!抓紧看!

最新文章

随机文章