在企业级应用中,Shell脚本通常需要与各类系统工具配合使用,以实现自动化部署、监控、日志分析、数据处理

在企业级应用中,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 (统计分析、报表生成)

 

通过灵活组合这些工具,可实现从简单的文件操作到复杂的分布式系统自动化运维。

你可能感兴趣的:(网络安全,linux,运维,网络)