最近通过B站UP主@林哥讲运维学到一个测试网卡流量吞吐的命令
tcpdump -i ens192 -w - | pv -bert >/dev/null
详解一下这条命令:
tcpdump -i ens192 -w -:
tcpdump 是一个用于捕获和分析网络流量的命令行工具。
-i ens192 指定了网络接口ens192,即从这个接口捕获流量。
-w - 指示tcpdump将捕获的数据写入标准输出(- 表示标准输出)。
强大的管道符:|
将 tcpdump 命令的输出传递给 pv 命令。
pv(Pipe Viewer)是一个命令行工具,用于监控数据通过管道传输的速度和进度。
-b 启用字节计数。
-e 显示传输的总字节数。
-r 显示传输速率。
-t 显示经过的时间。
>/dev/null
这部分将 pv 命令的输出重定向到 /dev/null,即丢弃所有输出。
/dev/null 是一个特殊文件,任何写入它的数据都会被丢弃。(老运维应该都知道吧)
通过这个命令,我们测试下wget一个内网NAS的传输速度:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/12de6a9da8a447f38ce2731dd91db0da.png
这里我把这条命令写入.bashrc了,这样可以通过tcpspeed命令直接运行,缺点是不能指定网卡
所以我思路打开,网卡可以通过变量更改啊
让我们看一下ip命令:
[root@localhost ~]# ip -o -4 route
default via 10.1.1.254 dev ens192 proto static metric 100
10.7.0.0/24 dev tun0 proto kernel scope link src 10.7.0.1
10.1.1.0/24 dev ens192 proto kernel scope link src 10.1.1.20 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.22.222.0/24 dev safeline-ce proto kernel scope link src 172.22.222.1
[root@localhost ~]#
这里我们可以看到我通过ip命令输出的ipv4各个路由
那么我们默认只观察公网流量,即默认路由0.0.0.0/0,如输出的第一行显示:
default via 10.1.1.254 dev ens192 proto static metric 100
这个输出可以看到dev后面紧跟的就是网卡名称ens192,那么我们可以直接通过awk命令提取这个名称
[root@localhost ~]# ip -o -4 route show to default | awk '{print $5}'
ens192
[root@localhost ~]#
OK,这样公网网卡也获取到了,剩下的就是写入变量,我们直接写一个speed.sh的脚本:
#!/bin/bash
# 自动获取网卡名称(排除lo回环接口)
INTERFACE=$(ip -o -4 route show to default | awk '{print $5}')
# 检查是否成功获取网卡名称
if [ -z "$INTERFACE" ]; then
echo "未能获取网卡名称,请检查网络配置。"
exit 1
fi
echo "使用网卡: $INTERFACE"
# 执行命令
tcpdump -i "$INTERFACE" -w - | pv -bert >/dev/null
保存并退出,别忘了给这个脚本可执行权限:
chmod a+x speed.sh
让我们运行下看看:
感谢大佬提供的经验,大家喜欢也可以去点点关注@林哥讲运维