Shell脚本100例_运维实战技巧_常用代码速查手册,Shell脚本实战精华,100例运维技巧与代码速查手册
最近在服务器上执行批量操作时总得手动敲命令?面对重复性工作还在当人肉机器人?Shell脚本就是你的数字员工!今天咱们用真实运维场景拆解常用代码,保你看完就能复制粘贴用起来。
一、系统管理三板斧
Q:新服务器上线要装几十个软件怎么办?
试试这个批量部署脚本,比手动操作快10倍:
bash复制#!/bin/bashPACKAGES=("httpd" "mariadb-server" "php" "python3")for pkg in "${PACKAGES[@]}"doyum -y install $pkg || echo "$pkg安装失败" >> error.logdonesystemctl enable httpd mariadb
对比传统安装方式:
操作方式 | 耗时 | 错误率 | 可追溯性 |
---|---|---|---|
手动安装 | 30分钟 | 高 | 无记录 |
脚本安装 | 3分钟 | 低 | 有日志 |
二、文件处理绝活
Q:每周五凌晨自动备份日志咋实现?
定时备份组合拳帮你搞定:
bash复制#!/bin/bashBACKUP_DIR="/var/logbackup/$(date +%Y%m%d)"mkdir -p $BACKUP_DIRfind /var/log -name "*.log" -exec tar -czf $BACKUP_DIR/logs.tar.gz {} +
进阶技巧:
- 添加
--newer-mtime
参数实现增量备份 - 配合
openssl
加密敏感日志 - 用
rsync
同步到异地服务器
三、监控预警系统
Q:服务器资源不足时如何自动报警?
智能监控脚本比人工巡检靠谱:
bash复制#!/bin/bashALERT_THRESHOLD=90DISK_USAGE=$(df / | awk 'NR==2{print $5}' | tr -d '%')if [ $DISK_USAGE -gt $ALERT_THRESHOLD ]; thenecho "服务器根分区使用率${DISK_USAGE}%" | mail -s "紧急告警" admin@example.comfi
监控指标扩展包:
- 内存占用率监控:
free -m | awk '/Mem/{print $3/$2 * 100}'
- CPU负载检测:
uptime | awk -F 'load average:' '{print $2}'
- 进程数预警:
ps -ef | wc -l
四、用户管理秘籍
Q:批量创建100个带初始密码的用户?
用户流水线生成术来帮忙:
bash复制#!/bin/bashfor i in {1..100}doUSERNAME="user$i"PASSWORD=$(openssl rand -base64 6)useradd $USERNAME && echo $PASSWORD | passwd --stdin $USERNAMEdone
安全加强版:
- 密码复杂度校验
- 家目录权限自动设置
- 登录失败次数限制
五、实用小工具集
文本内容提取术:
bash复制# 提取Nginx日志中的异常状态码awk '$9 ~ /50[0-9]/ {print $1,$7,$9}' access.log
文件批量重命名:
bash复制# 给所有.jpg文件添加日期前缀for file in *.jpg; do mv "$file" "$(date +%Y%m%d)_$file"; done
网络诊断工具:
bash复制# 持续检测域名解析状态while true; do dig example.com +short && sleep 5; done
个人实战心得
八年运维老鸟的血泪经验:别在脚本里写绝对路径!上周刚因为这个坑导致集群瘫痪。推荐用$(dirname "$0")
获取脚本所在目录,再也不用担心路径错误。变量引号要加全,处理带空格文件名时吃过亏的都知道多重要。
最容易被忽视的脚本调试技巧:在关键位置插入set -x
显示执行过程,用trap 'echo "错误发生在第$LINENO行"' ERR
捕获异常位置。记住,好脚本不是写出来的,是调出来的!