本文将介绍一个简单的Bash脚本,用于实时监控指定网卡的流量情况。这个脚本通过读取/proc/net/dev
文件获取网卡的接收(RX)和发送(TX)字节数,并计算每秒的流量。脚本不仅能够实时显示流量,还能将字节数转换为更为直观的单位(如KB、MB、GB),便于用户查看。
先看看脚本
#!/bin/bash# 设置接口名称eth="eno1"# 定义函数:将字节转换为人类可读的单位bytes_to_human() { local bytes=$1 if (( bytes < 1024 )); then echo "${bytes}B" elif (( bytes < 1048576 )); then printf "%.2fKB" "$(bc <<< "scale=2; $bytes / 1024")" elif (( bytes < 1073741824 )); then printf "%.2fMB" "$(bc <<< "scale=2; $bytes / 1048576")" else printf "%.2fGB" "$(bc <<< "scale=2; $bytes / 1073741824")" fi}# 实时监控流量while true; do # 获取上一次的接收和发送字节数 RXpre=$(cat /proc/net/dev | grep "$eth:" | awk '{print $2}') TXpre=$(cat /proc/net/dev | grep "$eth:" | awk '{print $10}') # 等待1秒 sleep 1 # 获取当前的接收和发送字节数 RXnext=$(cat /proc/net/dev | grep "$eth:" | awk '{print $2}') TXnext=$(cat /proc/net/dev | grep "$eth:" | awk '{print $10}') # 计算差值 RX=$((RXnext - RXpre)) TX=$((TXnext - TXpre)) # 将字节转换为人类可读的单位 RX_human=$(bytes_to_human $RX) TX_human=$(bytes_to_human $TX) # 清屏并打印结果 clear echo -e "\t RX `date +%k:%M:%S` TX" echo -e "$eth \t $RX_human/s $TX_human/s"done
1. 脚本功能概述
该脚本实现了实时监控指定网卡(如eno1
)的网络流量。它定期读取系统的/proc/net/dev
文件,提取网卡的接收和发送字节数,然后计算每秒的流量。流量数据以B/s
(字节每秒)、KB/s
(千字节每秒)、MB/s
(兆字节每秒)或GB/s
(千兆字节每秒)等更直观的单位显示。
2. 工作原理
接口选择:用户可以通过修改脚本中的
eth="eno1"
来指定要监控的网卡接口。常见的网卡名称包括eth0
、eno1
、wlan0
等。获取流量数据:脚本通过
cat /proc/net/dev
命令读取当前网络设备的流量数据。该文件包含了系统所有网卡的接收(RX)和发送(TX)字节数。使用grep
命令过滤出指定网卡的信息,并使用awk
提取字节数。计算流量差值:通过每秒读取两次字节数并计算差值(即流量的增量),实现实时流量监控。
字节数转化:脚本通过
bytes_to_human
函数将字节数转换为更加直观的单位(如KB、MB、GB)。实时显示:每秒更新一次流量,并清屏重新显示,以保持信息的实时性和可读性。
3. 如何使用
编辑脚本:打开终端并使用文本编辑器(如
nano
或vim
)创建一个新的脚本文件:
nano monitor_traffic.sh
粘贴脚本:将上述脚本内容粘贴到编辑器中,并保存。
赋予执行权限: 在终端中输入以下命令赋予脚本执行权限:
扫描二维码关注公众号,回复: 17604458 查看本文章
chmod +x monitor_traffic.sh
运行脚本:执行脚本来开始监控流量:
./monitor_traffic.sh
停止脚本:可以按Ctrl+C
停止脚本的执行。
这个简单的Bash脚本能够帮助系统管理员实时监控网络接口的流量情况,并将其以友好的格式显示出来。它可以作为一个基础工具进一步扩展,以满足更多的需求,例如带宽限制、流量分析等。