Shell批量操作实战(服务器集群、多文件处理)

张开发
2026/4/11 6:11:53 15 分钟阅读

分享文章

Shell批量操作实战(服务器集群、多文件处理)
在日常Linux运维、DevOps工作中面对多台服务器集群、海量文件重复操作手动逐台执行、逐个处理不仅效率极低还极易出现人为失误。Shell脚本凭借轻量、无需额外依赖、适配所有Linux环境的优势成为批量自动化操作的首选工具。本篇全程实战不讲冗余理论直接覆盖**服务器集群批量命令执行、批量文件分发、多文件批量重命名/权限修改/日志清理**三大高频场景脚本可直接复制修改使用新手也能快速上手。一、前期准备打通批量操作基础环境不管是服务器集群操作还是本地多文件处理先做好基础配置避免后续脚本执行报错、反复输入密码。1.1 服务器集群SSH免密登录核心批量远程操作必须配置免密登录否则脚本每次执行都会卡在密码输入环节全程自动化失效。# 本地生成SSH密钥对一路回车无需设置密码 ssh-keygen -t rsa # 批量分发公钥到远程服务器替换为对应IP、用户名 # 新建服务器IP列表文件 vim server_list.txt # 写入内容格式用户名 服务器IP 端口默认22可省略 root 192.168.1.10 root 192.168.1.11 root 192.168.1.12 # 执行公钥分发脚本 while read user ip port; do # 未指定端口默认22 port${port:-22} ssh-copy-id -p $port $user$ip done server_list.txt分发完成后直接ssh 用户名IP 无需输入密码批量脚本即可正常运行。1.2 基础脚本规范所有Shell脚本开头必须指定解释器做好变量定义、异常判断提升脚本健壮性#!/bin/bash # 脚本出错立即退出 set -e # 定义全局变量方便后续修改 SERVER_LISTserver_list.txt FILE_DIR/data/backup二、服务器集群批量操作实战针对多台服务器统一执行命令、分发文件、巡检运维告别逐台登录操作。2.1 批量远程执行命令通用脚本适用场景集群统一查看系统负载、更新软件、重启服务、修改配置等。#!/bin/bash # 集群批量执行命令脚本 # 用法sh batch_cmd.sh 要执行的命令 # 判断命令参数是否传入 if [ $# -ne 1 ];then echo 用法$0 【待执行命令】 exit 1 fi CMD$1 # 遍历服务器列表执行命令 while read user ip port; do port${port:-22} echo 服务器 $ip 执行结果 ssh -p $port $user$ip $CMD echo -e \n done $SERVER_LIST echo 集群批量命令执行完成实操示例# 批量查看所有服务器磁盘使用率 sh batch_cmd.sh df -h # 批量重启nginx服务 sh batch_cmd.sh systemctl restart nginx # 批量查看系统内存占用 sh batch_cmd.sh free -m2.2 批量文件分发上传/下载适用场景统一分发配置文件、安装包、脚本到集群所有服务器或批量下载服务器日志。#!/bin/bash # 批量文件分发脚本 # 用法sh batch_scp.sh 本地文件路径 远程目标目录 if [ $# -ne 2 ];then echo 用法$0 【本地文件】 【远程目录】 exit 1 fi LOCAL_FILE$1 REMOTE_DIR$2 # 遍历分发文件 while read user ip port; do port${port:-22} echo 正在分发文件至服务器$ip ssh -p $port $user$ip mkdir -p $REMOTE_DIR scp -P $port $LOCAL_FILE $user$ip:$REMOTE_DIR echo 服务器 $ip 文件分发完成 done $SERVER_LIST echo 集群文件批量分发完成实操示例# 将本地nginx.conf分发至所有服务器/etc/nginx目录 sh batch_scp.sh ./nginx.conf /etc/nginx2.3 集群批量巡检脚本进阶实战一键巡检所有服务器CPU、内存、磁盘、端口状态生成巡检报告。#!/bin/bash # 服务器集群批量巡检脚本 REPORT_FILEserver_check_$(date %Y%m%d).log echo 集群巡检报告 - $(date %Y-%m-%d %H:%M:%S) $REPORT_FILE while read user ip port; do port${port:-22} echo -e \n 服务器 $ip 巡检信息 $REPORT_FILE # 磁盘占用 ssh -p $port $user$ip df -h | grep /dev/vda1 $REPORT_FILE # 内存占用 ssh -p $port $user$ip free -h $REPORT_FILE # 系统负载 ssh -p $port $user$ip uptime $REPORT_FILE # 端口监听 ssh -p $port $user$ip ss -ntl | grep 80 $REPORT_FILE done $SERVER_LIST echo 集群巡检完成报告已生成至$REPORT_FILE三、多文件批量处理实战针对本地海量文件批量重命名、修改权限、清理日志、归档备份一键搞定重复操作。3.1 批量文件重命名适用场景统一修改文件后缀、添加前缀、替换文件名字段适配日志、备份文件规整。#!/bin/bash # 批量修改文件后缀.txt → .log TARGET_DIR/data/logs cd $TARGET_DIR for file in *.txt; do # 判断是否为普通文件避免目录误操作 if [ -f $file ];then # 重命名文件 mv $file ${file%.txt}.log echo 已重命名$file → ${file%.txt}.log fi done # 批量添加文件前缀 for file in *.log; do mv $file backup_$(date %Y%m%d)_$file done3.2 批量修改文件权限/属主适用场景项目部署后统一修正脚本权限、日志目录权限避免权限不足报错。#!/bin/bash # 批量给.sh脚本添加可执行权限 SCRIPT_DIR/data/scripts for script in $SCRIPT_DIR/*.sh; do if [ -f $script ];then chmod x $script chown root:root $script echo 已修复权限$script fi done3.3 批量日志清理/归档适用场景定期清理过期日志、备份历史文件释放服务器磁盘空间。#!/bin/bash # 批量清理7天前的日志文件 LOG_DIR/var/log/app # 清理7天前.log后缀文件 find $LOG_DIR -name *.log -mtime 7 -delete echo 过期日志清理完成 # 批量归档日志 ARCHIVE_DIR/data/archive/$(date %Y%m%d) mkdir -p $ARCHIVE_DIR find $LOG_DIR -name *.log -mtime -1 -exec mv {} $ARCHIVE_DIR \; echo 当日日志归档完成路径$ARCHIVE_DIR3.4 批量创建/删除文件#!/bin/bash # 批量创建100个测试文件 for i in {1..100}; do touch test_file_$i.txt done # 批量删除指定文件 rm -rf test_file_*.txt四、批量操作避坑要点执行前先测试高危命令rm、reboot先在单台服务器测试再批量执行建议加-e参数脚本出错立即停止路径务必绝对路径避免脚本执行时因相对路径错位导致文件误删、命令执行失败做好文件备份批量修改文件、清理数据前先备份原文件防止数据丢失服务器列表校验提前检查IP、用户名、端口是否正确避免免密登录失败大集群改用并行工具超过50台服务器建议搭配pdsh、pssh等并行工具提升执行效率。五、总结Shell批量操作是运维人员必备技能不用复杂的自动化平台几行脚本就能搞定服务器集群、多文件的重复工作。本篇所有脚本均经过实测只需修改对应IP、目录、命令参数即可直接投入生产使用。日常工作中把高频重复的操作封装成Shell脚本既能大幅提升工作效率又能减少人为失误轻松搞定各类批量运维任务。

更多文章