在企业级应用中,Shell脚本通常需要与各类系统工具配合使用,以实现自动化部署、监控、日志分析、数据处理等核心功能。以下是常见的工具分类及典型应用场景:
一、文件与目录操作工具
核心工具: ls / find / grep / awk / sed / cp / mv / rm / mkdir
应用场景:
1. 日志分析与清洗
- 用 find 定位日志文件:
bash
find /var/log/ -name "access.log*" -mtime -7 # 查找7天内的日志
- 用 grep 过滤关键信息(如错误日志):
bash
grep "ERROR" /var/log/app.log | awk '{print $4}' | sort | uniq -c # 统计高频错误代码
- 用 sed 批量替换日志中的敏感信息:
bash
sed -i 's/192.168.1.*/10.0.0.*/g' /var/log/secure # 脱敏IP地址
2. 文件批量处理
- 用 mv / cp 配合 find 移动归档文件:
bash
find /data/tmp -type f -mtime +30 -exec mv {} /data/archive/ \; # 归档30天前的文件
二、进程与服务管理工具
核心工具: ps / top / kill / systemctl / supervisorctl
应用场景:
1. 服务状态监控与重启
- 用 ps 检查进程是否存在:
bash
if ! ps -C tomcat -o pid=; then
systemctl start tomcat.service # 配合systemd启动服务
fi
- 用 top 实时监控CPU/内存占用(脚本中常结合 awk 提取数据):
bash
top -bn1 | grep "java" | awk '{print $9}' # 获取Java进程CPU使用率
2. 批量终止异常进程
bash
ps -ef | grep "leaked_process" | grep -v grep | awk '{print $2}' | xargs kill -9 # 强制终止进程
三、网络与端口工具
核心工具: curl / wget / netstat / ss / nslookup / telnet / nc
应用场景:
1. API调用与数据拉取
- 用 curl 调用HTTP接口(如获取监控数据):
bash
RESULT=$(curl -s -X GET "http://api.server.com/metrics" -H "Authorization: Bearer token")
- 用 wget 批量下载远程文件:
bash
wget -r -np -A "*.log" http://ftp.server.com/logs/ # 递归下载指定后缀文件
2. 端口与网络连通性检测
- 用 ss 检查端口是否监听:
bash
ss -ltnp | grep ":8080" # 检查8080端口是否被占用
- 用 nc 测试网络连通性:
bash
nc -zv 192.168.1.1 80 # 检测目标IP:端口是否可达
四、系统资源监控工具
核心工具: df / free / vmstat / dmesg / htop (需安装)
应用场景:
1. 磁盘与内存预警脚本
- 用 df 检测磁盘空间,触发报警:
bash
DISK_USED=$(df -H / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $DISK_USED -gt 80 ]; then
echo "磁盘空间不足" | mail -s "预警" [email protected]
fi
- 用 free 监控内存使用率:
bash
MEM_FREE=$(free -m | awk 'NR==2 {print $4}')
2. 性能数据采集
- 用 vmstat 记录系统性能指标(如CPU、内存、IO):
bash
vmstat 5 10 > vmstat.log # 每5秒采集1次,共10次
五、文本处理与数据转换工具
核心工具: cut / sort / uniq / tr / paste
应用场景:
1. 数据清洗与统计
- 用 cut 提取日志字段(如第4列的URL):
bash
access.log | cut -d' ' -f4 | sort | uniq -c | sort -nr > top_urls.txt # 统计高频访问URL
- 用 tr 转换字符大小写:
bash
echo "HELLO" | tr 'A-Z' 'a-z' # 输出小写
2. 多文件合并与对比
- 用 paste 合并文件列:
bash
paste user_ids.txt user_names.txt > user_info.txt # 按行合并两文件
六、压缩与归档工具
核心工具: tar / gzip / gunzip / zip / unzip
应用场景:
1. 日志备份与传输
- 用 tar 压缩并加密日志目录:
bash
tar -czvf logs_$(date +%Y%m%d).tar.gz /var/log/app/
openssl enc -aes-256-cbc -salt -in logs.tar.gz -out logs_encrypted.tar.gz # 加密
- 用 unzip 解压远程下载的压缩包:
bash
unzip -q package.zip -d /opt/app/ # 静默解压到指定目录
七、权限与用户管理工具
核心工具: chmod / chown / useradd / usermod / sudo
应用场景:
1. 自动化部署权限配置
- 部署应用时设置文件权限:
bash
chmod -R 755 /opt/app/bin/ # 赋予执行权限
chown -R app:app /opt/app/ # 设置属主属组
- 批量创建用户并授权:
bash
useradd -m -s /bin/bash deployer && echo "password" | passwd --stdin deployer
八、任务调度与流程控制
核心工具: crontab / at / sleep / trap
应用场景:
1. 定时任务脚本
- 通过 crontab 每日凌晨执行备份:
bash
0 2 * * * /bin/sh /scripts/backup_db.sh # crontab配置示例
- 用 sleep 控制脚本执行节奏(如避免高频请求):
bash
for i in {1..10}; do
curl http://api.server.com && sleep 30
done
九、软件包与环境管理工具
核心工具: yum / apt-get / dnf / rpm / dpkg
应用场景:
1. 服务器初始化脚本
- 批量安装依赖(CentOS为例):
bash
yum -y install epel-release && yum -y install nginx python3 wget # 安装扩展源及工具
- 检查软件包版本并升级:
bash
if rpm -q nginx | grep -q "1.18."; then
yum -y update nginx
fi
十、数据流与管道工具
核心工具: | (管道)、 > / >> (重定向)、 tee (分流)
应用场景:
1. 命令结果输出控制
- 将脚本日志同时输出到终端和文件:
bash
./deploy.sh | tee deploy.log # 实时显示并保存日志
- 错误日志单独重定向:
bash
command > output.log 2> error.log # 标准输出和错误分开存储
企业级组合案例:自动化部署脚本
bash
#!/bin/bash
# 场景:从Git拉取代码,编译,部署,重启服务
# 1. 检查依赖(配合yum/apt)
if ! command -v git &> /dev/null; then
yum -y install git
fi
# 2. 拉取代码(配合curl/wget)
git pull origin master
# 3. 编译(配合make/mvn)
mvn clean package -DskipTests
# 4. 停止旧进程(配合ps/kill)
ps -ef | grep "java -jar app.jar" | grep -v grep | awk '{print $2}' | xargs kill -9
# 5. 启动新服务(配合cp/mv)
cp target/app.jar /opt/app/
nohup java -jar /opt/app/app.jar > app.out 2>&1 &
# 6. 记录操作日志(配合date/tee)
echo "$(date +'%Y-%m-%d %H:%M:%S') 部署完成" | tee -a deploy_history.log
# 7. 定时触发(配合crontab)
(crontab -l 2>/dev/null; echo "0 3 * * * /bin/sh /scripts/deploy.sh") | crontab - # 每日3点执行
总结
Shell脚本的强大之处在于通过组合系统工具实现“胶水”功能,企业中常用工具可归纳为:
- 文件处理: find / grep / awk / sed (日志分析、数据清洗)
- 系统监控: df / free / ps / top (资源预警、进程管理)
- 网络交互: curl / wget / netstat (API调用、端口检测)
- 流程控制: crontab / systemctl (定时任务、服务管理)
- 数据处理: cut / sort / uniq (统计分析、报表生成)
通过灵活组合这些工具,可实现从简单的文件操作到复杂的分布式系统自动化运维。