Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1965445
  • 博文数量: 498
  • 博客积分: 2078
  • 博客等级: 大尉
  • 技术积分: 1645
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-18 22:43
个人简介

安大

文章分类

全部博文(498)

文章存档

2017年(1)

2016年(2)

2015年(21)

2014年(90)

2013年(101)

2012年(267)

2011年(16)

分类:

2012-06-27 11:03:28

3.计算以太网口的收发速率
解决完了前两个问题,到了第三个问题的解决上就遇到了挺多的问题,我在网上搜索了一下对于这个问题的解决,没有找到一个非常满意的解答,当然要获得网口的收发速率我们完全可以通过一些工具来实现,比方说iptraf就可以实时的监控!但是,我们依然是可以通过shell脚本来计算的,虽然计算出来的结果可能有些偏差,但是毕竟是对于一个linux初学者的一个很好锻炼!这里我们依旧是用到了前面提到的/proc文件系统!/proc/net/dev中记录了,网络收发数据包的信息,这是从系统启动到当前时刻,以太网口和无线网口收发的数据总量的一个统计信息,当然这个信息我们可以也可以通过ifconfig这个终端命令来获得。
cat /proc/net/dev
Inter-|   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""
这样我们就粗略的计算出了,以太网口的收发速率。通过这几天的学习,我个人感觉,其实对于一门技术的学习,最其实说起来并不是一件非常困难的事情,但是却需要你不断付出自己的努力,多动手相信你一定会有很多收获,当然也一定会从中体会到很多乐趣,当然很重要的一点,就是在学习的过程中要多总结,不然很容易忘记的哦亲!!!时间不早了,晚安!!

阅读(2679) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~