3.计算以太网口的收发速率
解决完了前两个问题,到了第三个问题的解决上就遇到了挺多的问题,我在网上搜索了一下对于这个问题的解决,没有找到一个非常满意的解答,当然要获得网口的收发速率我们完全可以通过一些工具来实现,比方说iptraf就可以实时的监控!但是,我们依然是可以通过shell脚本来计算的,虽然计算出来的结果可能有些偏差,但是毕竟是对于一个linux初学者的一个很好锻炼!这里我们依旧是用到了前面提到的/proc文件系统!/proc/net/dev中记录了,网络收发数据包的信息,这是从系统启动到当前时刻,以太网口和无线网口收发的数据总量的一个统计信息,当然这个信息我们可以也可以通过ifconfig这个终端命令来获得。
cat /proc/net/devInter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 32904 533 0 0 0 0 0 0 32904 533 0 0 0 0 0 0
eth0: 178688416 279607 0 0 0 0 0 136216 11018704 93614 0 0 0 0 0 0
wlan0: 113089510 446659 0 0 0 0 0 0 3794707 30985 0 0 0 0 0 0
shell中对于文件处理的命令异常强大,我们可以通过grep命令来截取eth行的数据来进行计算,我们第一次分别取得receive和transmit收发的数据的总量,然后经过一个时间间隔(对于时间间隔的选取,以情况而定,对于收发操作频繁的节点,可以选取1s的时间间隔,由于我是在自己的电脑上进行的计算,收发数据比较小,为了更准确我就选取了6s的时间间隔,时间间隔的选取可以使用
sleep 6来进行)停留6s之后我们再次读取收发数据量,做差值,除以时间从而获得收发速率!
在这里需要说明一下,一般来说shell中是不支持浮点数运算的,一开始在用脚本时间的时候,让我非常的蛋疼,因为自己电脑每秒发送的数据量非常小,常常不足1B,这样在shell中计算时结果老是返回0,非常不爽!所以对于一个菜鸟来说我们就运用了强大的google,看看能不能在shell中进行浮点运算呢!答案是肯定的,但是我们要借用一些个别的工具,在这里我就使用了bc!
#!/bin/bash
#Program:
# this program will calculate the rate of the net rec and tran!!
#History:
#2012/06/14 mini First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#从/proc/net/dev中截取以太网口的收发数据量
rec1=$(grep 'eth' /proc/net/dev | cut -d " " -f4)
tran1=$(grep 'eth' /proc/net/dev | cut -d " " -f6)
#echo "the recieve amount of the data is: $rec1"
#echo "the transform amount of the data is: $tran1"
#取六秒的时间间隔
sleep 6
#再次截取收发数据量
rec2=$(grep 'eth' /proc/net/dev | cut -d " " -f4)
tran2=$(grep 'eth' /proc/net/dev | cut -d " " -f6)
#echo "the recieve amount of the data is: $rec2"
#echo "the transform amount of the data is: $tran2"
#计算六秒时间间隔内数据量的差值
declare -i mrec=$(($rec2-$rec1))
declare -i mtran=$(($tran2-$tran1))
#计算以太网口的收发速率(浮点运算)
recrate=$(echo "scale=2;$mrec/6.0"|bc)
tranrate=$(echo "scale=2;$mtran/6.0"|bc)echo "the rate of recieve is:$recrate"B/s""
echo "the rate of transform is:$tranrate"B/s""
这样我们就粗略的计算出了,以太网口的收发速率。通过这几天的学习,我个人感觉,其实对于一门技术的学习,最其实说起来并不是一件非常困难的事情
,但是却需要你不断付出自己的努力,多动手相信你一定会有很多收获,当然也一定会从中体会到很多乐趣
,当然很重要的一点,就是在学习的过程中要多总结,不然很容易忘记的哦亲!!!时间不早了,晚安!!
阅读(3397) | 评论(0) | 转发(3) |