别再手动敲命令了!用Shell脚本5分钟搞定Linux日常运维(附10个实用脚本)

张开发
2026/4/16 13:51:47 15 分钟阅读

分享文章

别再手动敲命令了!用Shell脚本5分钟搞定Linux日常运维(附10个实用脚本)
Shell脚本自动化10个提升Linux运维效率的实用脚本每天在Linux终端重复输入相同的命令批量处理文件时手动操作到怀疑人生服务监控全靠肉眼盯着日志是时候解放双手了Shell脚本作为Linux系统的瑞士军刀能将这些重复性工作转化为一键执行的自动化流程。本文将分享10个即拿即用的实用脚本覆盖文件处理、系统监控、备份等高频场景让你体验自动化带来的爽感。1. 批量文件重命名脚本面对成百上千个需要统一命名的文件手动操作不仅耗时还容易出错。这个脚本可以批量添加前缀/后缀、修改扩展名或按规则重命名#!/bin/bash # 批量添加前缀 for file in *.jpg; do mv $file vacation_$file done # 批量修改扩展名 for file in *.txt; do mv $file ${file%.txt}.md done # 按序号重命名IMG001.jpg, IMG002.jpg... count1 for file in *.jpg; do mv $file IMG$(printf %03d $count).jpg ((count)) done使用场景整理照片库时统一命名项目文档版本批量更新数据集预处理标准化命名提示执行前建议先使用echo测试重命名效果确认无误后再替换为mv命令2. 日志文件自动清理脚本日志文件不及时清理可能快速吞噬磁盘空间。这个智能清理脚本可以#!/bin/bash LOG_DIR/var/log/myapp MAX_DAYS30 MAX_SIZE500M # 按时间清理 find $LOG_DIR -name *.log -type f -mtime $MAX_DAYS -delete # 按大小清理 find $LOG_DIR -name *.log -type f -size $MAX_SIZE -exec truncate -s 0 {} \; # 生成清理报告 echo $(date %Y-%m-%d %H:%M:%S) 清理完成 /var/log/cleanup.log增强功能保留最近N天的日志对超大日志清空内容而非删除记录每次清理操作3. 服务状态监控与自动恢复关键服务意外停止怎么办这个监控脚本会定期检查并自动重启服务#!/bin/bash SERVICEnginx CHECK_INTERVAL60 while true; do if ! systemctl is-active --quiet $SERVICE; then echo $(date) - $SERVICE 服务停止尝试重启... /var/log/service_monitor.log systemctl restart $SERVICE if [ $? -eq 0 ]; then echo $(date) - $SERVICE 重启成功 /var/log/service_monitor.log else echo $(date) - $SERVICE 重启失败发送警报 /var/log/service_monitor.log # 集成邮件/短信报警功能 send_alert $SERVICE 服务异常 fi fi sleep $CHECK_INTERVAL done报警集成方案邮件通知mail -s 服务异常 adminexample.comSlack/webhook通知curl -X POST -H Content-type: application/json --data {text:服务异常}短信通知通过第三方API4. 自动化备份脚本数据备份是系统管理员的必修课。这个脚本提供全量增量备份方案#!/bin/bash BACKUP_DIR/backups SOURCE_DIRS(/etc /home /var/www) DB_USERroot DB_PASSpassword TIMESTAMP$(date %Y%m%d_%H%M%S) # 创建备份目录 mkdir -p $BACKUP_DIR/full_$TIMESTAMP # 文件系统备份 for dir in ${SOURCE_DIRS[]}; do rsync -a --delete $dir $BACKUP_DIR/full_$TIMESTAMP done # MySQL数据库备份 databases$(mysql -u$DB_USER -p$DB_PASS -e SHOW DATABASES; | grep -Ev (Database|information_schema|performance_schema)) for db in $databases; do mysqldump -u$DB_USER -p$DB_PASS --single-transaction $db | gzip $BACKUP_DIR/full_$TIMESTAMP/${db}_$TIMESTAMP.sql.gz done # 保留最近7天备份 find $BACKUP_DIR -type d -name full_* -mtime 7 -exec rm -rf {} \;备份策略优化每周全量备份每日增量备份备份完成后校验文件完整性支持加密敏感数据备份可选远程备份到AWS S3/其他服务器5. 系统资源监控报告快速掌握系统健康状况的监控脚本#!/bin/bash REPORT_FILE/var/log/system_report_$(date %Y%m%d).log { echo 系统资源报告 $(date) echo -e \nCPU使用率TOP5进程 ps -eo pid,user,%cpu,cmd --sort-%cpu | head -n 6 echo -e \n内存使用情况 free -h echo -e \n磁盘使用情况 df -h echo -e \n网络连接统计 netstat -ant | awk {print $6} | sort | uniq -c echo -e \n最近登录用户 last -n 5 echo -e \n当前运行的服务 systemctl list-units --typeservice --staterunning | grep -v loaded active running } $REPORT_FILE进阶功能定时发送报告到邮箱资源超过阈值触发警报生成可视化图表配合其他工具6. 批量用户管理脚本简化用户账户的批量创建/删除/权限管理#!/bin/bash USER_FILEusers.list # 格式: username:password:group1,group2 if [ ! -f $USER_FILE ]; then echo 错误用户列表文件不存在 exit 1 fi while IFS: read -r username password groups; do # 创建用户 if id $username /dev/null; then echo 用户 $username 已存在 else useradd -m $username echo $username:$password | chpasswd echo 创建用户 $username fi # 设置用户组 if [ -n $groups ]; then usermod -aG $groups $username fi # 设置家目录权限 chmod 700 /home/$username done $USER_FILE安全增强强制首次登录修改密码设置密码过期策略禁止root直接登录配置SSH密钥认证7. 网络诊断工具箱集成常用网络诊断命令的一站式脚本#!/bin/bash IP_ADDRESS$1 if [ -z $IP_ADDRESS ]; then echo 用法: $0 IP或域名 exit 1 fi echo 网络诊断报告$IP_ADDRESS echo -e \n1. Ping测试 ping -c 4 $IP_ADDRESS echo -e \n2. Traceroute路径追踪 traceroute $IP_ADDRESS echo -e \n3. DNS解析检查 dig $IP_ADDRESS short echo -e \n4. 端口连通性测试 nc -zv $IP_ADDRESS 22 80 443 21 echo -e \n5. HTTP响应检查 curl -I http://$IP_ADDRESS 2/dev/null | head -n 1 echo -e \n诊断完成于 $(date)扩展功能保存历史诊断结果对比自动化定期网络质量监测可视化网络拓扑发现8. 安全加固自动化脚本快速实施基础安全防护措施#!/bin/bash # 基础安全加固脚本 echo 更新系统补丁... apt update apt upgrade -y echo 配置防火墙... ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw --force enable echo 禁用root SSH登录... sed -i s/^PermitRootLogin yes/PermitRootLogin no/ /etc/ssh/sshd_config echo 设置密码策略... sed -i s/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/ /etc/login.defs sed -i s/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/ /etc/login.defs sed -i s/^PASS_WARN_AGE.*/PASS_WARN_AGE 14/ /etc/login.defs echo 启用自动安全更新... apt install unattended-upgrades -y dpkg-reconfigure -plow unattended-upgrades echo 安全加固完成建议重启系统额外安全措施安装并配置fail2ban防暴力破解设置文件系统完整性检查配置审计日志(auditd)定期安全扫描9. 开发环境一键配置脚本快速搭建标准化开发环境#!/bin/bash # 开发环境自动化配置 echo 安装基础工具... apt install -y git vim curl wget tree htop echo 配置Vim环境... cat ~/.vimrc EOF set number set tabstop4 set expandtab syntax on EOF echo 安装Python环境... apt install -y python3 python3-pip python3-venv pip3 install --upgrade pip echo 配置Git全局设置... git config --global user.name Your Name git config --global user.email your.emailexample.com git config --global core.editor vim echo 安装Docker... curl -fsSL https://get.docker.com | sh usermod -aG docker $USER echo 环境配置完成环境定制选项支持多版本Python/Node.js可选安装数据库服务配置IDE/编辑器插件设置项目目录结构模板10. 自动化测试集成脚本将测试流程融入日常开发工作流#!/bin/bash # 自动化测试流水线 echo 代码风格检查... flake8 . || { echo 代码风格检查失败; exit 1; } echo 单元测试... python -m pytest tests/unit --covsrc --cov-reporthtml || { echo 单元测试失败; exit 1; } echo 集成测试... python -m pytest tests/integration || { echo 集成测试失败; exit 1; } echo 安全扫描... bandit -r src || { echo 安全扫描发现问题; exit 1; } echo 性能基准测试... locust -f tests/performance/locustfile.py --headless -u 100 -r 10 -t 1m || { echo 性能测试未达标; exit 1; } echo 所有测试通过生成报告... generate_report.shCI/CD集成支持Jenkins/GitLab CI流水线测试失败自动通知历史测试结果对比多环境测试矩阵脚本优化与维护技巧写出好脚本只是开始长期维护更需要方法1. 脚本自文档化#!/bin/bash :DOC 脚本名称: system_backup.sh 功能描述: 执行系统全量备份 作者: Your Name 最后更新: 2023-08-20 参数说明: -d 指定备份目录 -c 启用压缩 使用示例: ./system_backup.sh -d /backups -c DOC2. 错误处理最佳实践set -euo pipefail # 严格模式 log_error() { echo [ERROR] $(date %Y-%m-%d %H:%M:%S) - $1 $LOG_FILE exit 1 } trap log_error 脚本被中断 INT TERM3. 性能优化技巧减少子进程调用使用内置字符串处理替代awk/sed批量操作代替循环并行处理任务4. 版本控制集成# 在脚本开头加入版本检查 CURRENT_VERSION1.2.0 LATEST_VERSION$(curl -s https://api.github.com/repos/your/repo/tags | jq -r .[0].name) if [ $CURRENT_VERSION ! $LATEST_VERSION ]; then echo 发现新版本 $LATEST_VERSION请更新 fi从终端命令到自动化脚本的转变不仅是效率的提升更是工作方式的升级。这些脚本只是起点真正的力量在于根据实际需求定制专属自动化方案。当你在终端输入./automate.sh后看着任务自动完成时那种成就感才是最好的回报。

更多文章