如果我们想在linux下查看一个网络接口每秒钟收发的数据流量信息,可以采用下面的脚本来实现,这里以Debian11环境为例。
首先需要安装依赖包
sudo apt install jq
脚本内容如下,直接复制粘贴到一个文件,比如if_stat.sh中即可
#!/bin/bash
# 获取接口名
interface="enp2s0" #需要根据自己系统里的接口名字进行更换
# 定义函数,用于获取接口字节数
get_interface_bytes() {
ip -s -j -p -d link show dev "$1" | jq -r ".[0].stats64.$2.bytes"
}
# 获取初始的接收和发送的字节数
received_bytes=$(get_interface_bytes "$interface" "rx")
transmitted_bytes=$(get_interface_bytes "$interface" "tx")
# 延时一秒钟
sleep 1
# 再次获取接口字节数
latest_received_bytes=$(get_interface_bytes "$interface" "rx")
latest_transmitted_bytes=$(get_interface_bytes "$interface" "tx")
# 计算每秒钟的流量
received_per_second=$((latest_received_bytes - received_bytes))
transmitted_per_second=$((latest_transmitted_bytes - transmitted_bytes))
# 将字节数转换为易读格式
function format_bytes() {
local bytes=$1
local -a suffixes=('B' 'KB' 'MB' 'GB')
local suffix_index=0
while ((bytes > 1024)); do
bytes=$((bytes / 1024))
suffix_index=$((suffix_index + 1))
done
echo "$bytes ${suffixes[suffix_index]}"
}
# 打印结果
echo "RX/s: $(format_bytes $received_per_second)"
echo "TX/s: $(format_bytes $transmitted_per_second)"
```
在debian的shell下执行:
bash if_stat.sh 即可得到当前的网络接口数据收发速率,如下:
RX/s: 40 KB
TX/s: 24 KB