如何获取终端当前的上传和下载速度?

我希望终端输出我网络连接的当前上传和下载速度。 我不想实时监控速度。 我只想要一个“静态”值才能将其写入文件中。

我该如何实现?

奇怪的是,最简单的方法似乎是查看/proc/net/dev 。 我写了以下内容来比较该文件两次(第二次延迟),然后减去总字节值。 在这种情况下, em1是网络适配器,所以只需将其更改为您需要查看的内容。

 awk '/em1/ {i++; rx[i]=$2; tx[i]=$10}; END{print rx[2]-rx[1] " " tx[2]-tx[1]}' \ <(cat /proc/net/dev; sleep 1; cat /proc/net/dev) 

输出是两个数字。 每秒接收的字节数,后跟每秒发送的字节数。

以下是Oli优秀解决方案的变体:

 awk '{if(l1){print $2-l1,$10-l2} else{l1=$2; l2=$10;}}' \ <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev) 

它会打印出与Oli方法相同的结果:

 $ awk '{if(l1){print $2-l1,$10-l2} else{l1=$2; l2=$10;}}' \ > <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev) 401500 30286 

第一个值是以每秒字节数为单位的下载速率,第二个值是上载速率。 您可以通过以下方式获得更加人性化的格式:

 $ awk '{if(l1){print ($2-l1)/1024"kB/s",($10-l2)/1024"kB/s"} else{l1=$2; l2=$10;}}' \ <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev) 398.771kB/s 82.8066kB/s