首先放代码如下所示
#!/bin/bash
cp /proc/net/dev tmp_dev1
sed -i '1,2d' tmp_dev1
while(true);do
sleep 1
cp /proc/net/dev tmp_dev2
sed -i '1,2d' tmp_dev2
clear
echo "*************************************************************************"
awk 'NR==FNR{a[$1]=$2+$9} NR!=FNR{a[$1]=a[$1]-$2-$9} END{for(i in a) printf("%-15s current speed is %.2f Mb/s %.2f kb/s \n", i, a[i]/1024/1024, a[i]/1024)}' tmp_dev2 tmp_dev1
echo "*************************************************************************"
mv -f tmp_dev2 tmp_dev1
done
结果如下所示:
*************************************************************************
tunl0: current speed is 0.00 Mb/s 0.00 kb/s
eth0: current speed is 0.00 Mb/s 0.00 kb/s
ip6tnl0: current speed is 0.00 Mb/s 0.00 kb/s
lo: current speed is 0.00 Mb/s 0.00 kb/s
*************************************************************************
所需知识要点
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。/proc文件系统中包含了很多目录,其中/proc/net/dev 保存了网络适配器及统计信息。
root@803e41ac5ea4:~/tes# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth0: 26249010 18636 0 0 0 0 0 0 409951 7300 0 0 0 0 0 0
tunl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip6tnl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
最左边的表示接口的名字,Receive表示收包,Transmit表示发送包;
- bytes表示收发的字节数;
- packets表示收发正确的包量;
- errs表示收发错误的包量;
- drop表示收发丢弃的包量;
则数据流量速度取得是发送和接收的字节数的量。取的间隔1s计算一次。
流程图如下
待更新。。。。。。
网友评论