企业网络管理Shell编程实战:从基础监控到批量运维

张开发
2026/4/3 9:13:16 15 分钟阅读
企业网络管理Shell编程实战:从基础监控到批量运维
https://www.doubao.com/chat/38419710769535234在企业网络运维中管理员经常面临大量重复性工作——比如批量检测网段在线主机、监控端口状态、统计网络流量、批量配置网络设备等。这些工作手动操作效率低、易出错而Shell编程作为Linux系统自带的轻量工具无需额外安装依赖就能快速实现自动化运维大幅提升网络管理效率。本文聚焦企业网络管理的核心场景提供4个高频实用的Shell脚本每个脚本均包含完整代码、详细解析和实操步骤新手也能直接复制复用同时讲解脚本优化思路助力运维人员打造贴合自身企业的自动化工具。一、核心场景1网段在线主机扫描企业局域网必备企业局域网中经常需要快速排查指定网段的在线主机判断设备是否正常联网。传统ping命令逐个检测效率极低使用fping工具结合Shell脚本可实现批量扫描适用于10.0.0.0/24、192.168.1.0/24等常用网段。1.1 环境准备依赖fping工具fping是高效批量ping工具比系统自带ping更适合网段扫描需先按系统类型安装# Ubuntu/Debian 系统 sudo apt update sudo apt install fping -y # Rocky Linux/CentOS/RHEL系统需先启用EPEL仓库 sudo dnf install epel-release -y sudo dnf install fping -y # 验证安装成功 fping -v # 输出版本信息即表示安装成功1.2 完整扫描脚本#!/bin/bash # 脚本功能批量扫描指定网段在线主机输出在线IP及数量自动清理临时文件 # 适用场景企业局域网设备排查、网络连通性检测 # 作者CSDN-运维小助手 # 日期2026-04-02 # 定义可修改变量根据企业网段调整 IP_FILEtemp_ip_list.txt # 临时IP列表文件自动删除 SUBNET_PREFIX192.168.1 # 网段前缀如192.168.1对应192.168.1.0/24网段 TIMEOUT500 # 超时时间毫秒网络不稳定可改为1000 INTERVAL1 # ping包发送间隔毫秒 # 检查fping工具是否安装 if ! command -v fping /dev/null; then echo 错误未安装fping工具请先执行安装命令 exit 1 fi # 生成指定网段IP列表1-254 echo 开始生成${SUBNET_PREFIX}.0/24网段IP列表 for ((i1; i254; i)); do echo ${SUBNET_PREFIX}.$i $IP_FILE done echo IP列表生成完成共254个IP临时存储于$IP_FILE # 批量扫描在线主机 echo -e \n 开始扫描在线主机预计3-5秒 # fping核心参数-a只输出在线IP-f读取IP列表-i间隔-t超时2/dev/null忽略错误提示 ONLINE_HOSTS$(fping -a -f $IP_FILE -i $INTERVAL -t $TIMEOUT 2/dev/null) # 输出扫描结果 echo -e \n echo ${SUBNET_PREFIX}.0/24网段扫描结果 if [ -z $ONLINE_HOSTS ]; then echo 未发现在线主机可能原因1.网段错误2.网络禁止ICMP协议3.无设备在线4.缺少root权限 else HOST_COUNT$(echo $ONLINE_HOSTS | wc -l) echo 共发现 $HOST_COUNT 台在线主机 echo $ONLINE_HOSTS | nl -w2 -s. # 带序号输出便于查看 fi echo # 清理临时文件避免占用磁盘空间 rm -f $IP_FILE echo -e \n临时文件已清理扫描结束 exit 01.3 脚本解析与实操变量定义将网段前缀、超时时间等设为变量后续修改网段时无需改动核心代码适配不同企业网络环境。依赖检查脚本开头判断fping是否安装避免因缺少工具导致脚本执行失败提升健壮性。实操步骤复制脚本保存为scan_online_hosts.sh修改SUBNET_PREFIX为企业实际网段如10.0.0赋予执行权限chmod x scan_online_hosts.sh执行脚本sudo ./scan_online_hosts.sh建议root权限执行避免ping权限不足。二、核心场景2端口状态监控保障服务可用性企业网络中Web服务80/443端口、数据库3306端口、SSH22端口等核心服务的端口状态直接影响业务正常运行。以下脚本提供两种监控方式适配本地端口监听和远程端口连通性检测。2.1 本地端口监听监控ss命令无需额外安装#!/bin/bash # 脚本功能监控本地指定端口是否处于监听状态支持批量端口监控 # 适用场景本地服务器核心端口监控、服务存活检测 # 用法./monitor_local_port.sh 80 443 22后面跟需要监控的端口 # 检查是否传入端口参数 if [ $# -eq 0 ]; then echo 用法错误请传入需要监控的端口例如./monitor_local_port.sh 80 443 22 exit 1 fi # 循环监控每个端口 echo 本地端口监听状态监控结果$(date %Y-%m-%d %H:%M:%S) for port in $; do # 验证端口格式是否合法1-65535 if ! [[ $port ~ ^[1-9][0-9]{0,4}$ $port -le 65535 ]]; then echo 警告端口$port 格式非法跳过监控 continue fi # 使用ss命令检查端口监听状态精确匹配端口 if ss -lnt ( sport :$port ) | grep -q LISTEN; then echo ✅ 端口 $port正在监听服务正常 else echo ❌ 端口 $port未监听服务可能异常 # 可选添加告警逻辑如邮件、短信示例 # echo 端口$port未监听服务异常 | mail -s 端口监控告警 admincompany.com fi done exit 02.2 远程端口连通性监控telnettimeout#!/bin/bash # 脚本功能监控远程主机指定端口的连通性支持批量IP端口组合 # 适用场景跨服务器端口监控、网络设备端口检测 # 用法./monitor_remote_port.sh 192.168.1.100:80 192.168.1.101:3306 # 检查是否传入IP:端口参数 if [ $# -eq 0 ]; then echo 用法错误请传入IP:端口组合例如./monitor_remote_port.sh 192.168.1.100:80 exit 1 fi # 检查telnet和timeout工具是否安装 if ! command -v telnet /dev/null; then echo 错误未安装telnet工具请先安装 exit 1 fi if ! command -v timeout /dev/null; then echo 错误系统缺少timeout命令无法控制连接超时 exit 1 fi # 循环监控每个IP端口组合 echo 远程端口连通性监控结果$(date %Y-%m-%d %H:%M:%S) TIMEOUT_TIME5 # 连接超时时间秒 for addr in $; do # 拆分IP和端口按冒号分割 ip$(echo $addr | cut -d: -f1) port$(echo $addr | cut -d: -f2) # 验证IP和端口格式 if ! [[ $port ~ ^[1-9][0-9]{0,4}$ $port -le 65535 ]]; then echo 警告$addr 端口格式非法跳过监控 continue fi # 用timeout控制telnet连接时间避免卡死 if timeout $TIMEOUT_TIME telnet $ip $port /dev/null 21 | grep -q Connected; then echo ✅ $ip:$port端口开放连通正常 else echo ❌ $ip:$port端口关闭或无法连通 fi done exit 0三、核心场景3网络流量实时监控排查带宽异常企业网络带宽异常如流量突增、恶意占用会影响业务正常运行通过Shell脚本读取/proc/net/dev文件系统自带无需额外工具可实时统计指定网卡的收发流量快速定位带宽占用问题。3.1 完整流量监控脚本#!/bin/bash # 脚本功能实时监控指定网卡的收发流量计算每秒速率格式化输出 # 适用场景服务器带宽监控、流量异常排查 # 用法./monitor_network_traffic.sh eth0eth0为需要监控的网卡名称 # 检查是否传入网卡参数 if [ $# -ne 1 ]; then echo 用法错误请传入需要监控的网卡名称例如./monitor_network_traffic.sh eth0 echo 提示执行 ip addr 可查看所有网卡名称 exit 1 fi INTERFACE$1 # 检查网卡是否存在 if ! ip addr show $INTERFACE /dev/null; then echo 错误网卡$INTERFACE 不存在请检查网卡名称 exit 1 fi # 读取初始流量数据单位字节 read_rx1 rx1 tx1 $(cat /proc/net/dev | grep -w $INTERFACE | awk {print $2, $10}) sleep 1 # 间隔1秒计算每秒速率 read_rx2 rx2 tx2 $(cat /proc/net/dev | grep -w $INTERFACE | awk {print $2, $10}) # 计算每秒收发流量字节转KB rx_speed$(( (rx2 - rx1) / 1024 )) tx_speed$(( (tx2 - tx1) / 1024 )) # 格式化输出结果 echo 网卡$INTERFACE 实时流量监控$(date %Y-%m-%d %H:%M:%S) echo 接收速率${rx_speed} KB/s echo 发送速率${tx_speed} KB/s echo # 可选添加流量阈值告警如接收速率超过1000KB/s告警 THRESHOLD1000 if [ $rx_speed -gt $THRESHOLD ]; then echo ⚠️ 警告接收速率超过${THRESHOLD}KB/s可能存在带宽异常 # echo 网卡$INTERFACE流量异常接收速率${rx_speed}KB/s | mail -s 流量告警 admincompany.com fi exit 03.2 脚本核心解析/proc/net/dev文件是Linux系统存储网络接口流量数据的核心文件每行对应一个网卡其中第2列是接收字节数第10列是发送字节数。脚本通过两次读取该文件的差值除以时间间隔1秒得到每秒流量速率无需依赖iftop等第三方工具轻量高效。四、核心场景4批量配置网络设备多设备运维企业拥有多台交换机、路由器时批量配置SNMP、端口限速等功能手动操作耗时费力。通过Shell脚本模拟telnet登录可实现多设备批量配置适用于Cisco、H3C等主流网络设备。#!/bin/bash # 脚本功能批量登录网络设备执行指定配置如添加SNMP社区记录操作日志 # 适用场景多台交换机、路由器批量配置 # 前提1. Linux服务器安装telnet客户端2. 准备设备IP清单文件 # 定义变量根据企业设备信息修改 TELNET_PWDadmin # 设备telnet登录密码 EN_PWDadmin123 # 设备特权模式密码如Cisco的enable密码 DEVICE_LISTdevice_list.txt # 设备IP清单文件每行一个IP LOG_FILEbatch_config.log # 操作日志文件 CONFIG_CMD( # 需要执行的配置命令可按需添加 configure terminal snmp-server community public ro snmp-server community private rw exit wr # 保存配置不同设备命令可能不同如H3C为save ) # 检查依赖和文件 if ! command -v telnet /dev/null; then echo 错误未安装telnet客户端请先安装 exit 1 fi if [ ! -f $DEVICE_LIST ]; then echo 错误设备清单文件$DEVICE_LIST 不存在请创建 exit 1 fi # 清空日志文件可选保留历史日志可删除此行 $LOG_FILE # 循环处理每台设备 echo 开始批量配置网络设备$(date %Y-%m-%d %H:%M:%S) | tee -a $LOG_FILE for ip in $(cat $DEVICE_LIST); do echo -e \n 处理设备$ip | tee -a $LOG_FILE # 先检测设备是否在线 if ! ping -W2 -c2 $ip /dev/null; then echo $ip设备离线跳过配置 | tee -a $LOG_FILE continue fi # 模拟telnet登录执行配置命令 ( sleep 2; echo $TELNET_PWD # 输入telnet密码 sleep 2; echo en # 进入特权模式 sleep 2; echo $EN_PWD # 输入特权模式密码 # 循环执行配置命令 for cmd in ${CONFIG_CMD[]}; do sleep 2; echo $cmd done sleep 10; echo exit # 退出登录 ) | telnet $ip /dev/null # 检查配置是否成功 if [ $? -eq 0 ]; then echo $ip配置成功 | tee -a $LOG_FILE else echo $ip配置失败请手动检查 | tee -a $LOG_FILE fi done echo -e \n 批量配置完成日志已保存至$LOG_FILE | tee -a $LOG_FILE exit 0五、Shell脚本优化技巧企业级适配上述脚本可根据企业实际需求优化提升稳定性和实用性核心优化方向如下定时执行结合crontab定时运行脚本实现无人值守监控。例如每天凌晨2点扫描网段每5分钟监控端口状态# 编辑crontab配置crontab -e# 添加如下内容路径替换为实际脚本路径0 2 * * * /root/scripts/scan_online_hosts.sh*/5 * * * * /root/scripts/monitor_local_port.sh 80 443 22告警机制添加邮件、短信告警如使用mail命令、企业微信机器人异常时及时通知管理员避免故障扩大。参数化优化将脚本中的固定参数如网段、密码、阈值提取到配置文件中后续修改无需改动脚本核心代码降低维护成本。日志完善增加详细日志记录如操作时间、执行结果、错误信息便于后续故障排查和审计。六、实战注意事项权限问题部分操作如ping、telnet、修改网络配置需要root权限执行脚本时建议添加sudo。设备兼容性不同品牌网络设备如Cisco、H3C的命令存在差异批量配置时需根据设备型号调整配置命令。安全防护脚本中若包含设备密码、敏感信息建议设置脚本权限为700chmod 700 脚本名避免权限泄露。测试验证新脚本在企业环境中使用前先在测试机或非核心设备上验证避免误操作导致网络故障。七、总结Shell编程是企业网络运维的“轻量利器”无需复杂的开发环境仅通过简单的命令组合和逻辑编写就能解决批量监控、设备配置等高频痛点大幅提升运维效率降低人工操作失误率。本文提供的4个核心场景脚本覆盖了企业网络管理的大部分基础需求读者可根据自身企业的网络环境、设备型号灵活修改脚本参数和命令打造专属的自动化运维工具。如果在使用过程中遇到问题或有其他个性化需求如流量统计可视化、更复杂的设备配置脚本欢迎在评论区留言交流✨ 原创不易收藏关注后续持续更新企业运维Shell实战脚本

更多文章