Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28872
  • 博文数量: 13
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-12 20:16
文章分类
文章存档

2012年(13)

我的朋友
最近访客

分类:

2012-04-25 11:06:40

shell awk实现定时监控网卡流量脚本

 

实现原理:

root@gongzhi-virtual-machine:~# 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:  126000    2100    0    0    0     0          0         0   #126000    2100    0    0    0     0       0          0

  eth0: 1302358    5520    0    0    0     0          0         0  #1466920    4007    0    0    0     0       0          0

root@gongzhi-virtual-machine:~#

通过利用文件/proc/net/dev可以知道网卡流量发送和接收的总量,每隔一秒统计发送总量来判断网速。

 

脚本清单:

#! /bin/bash

#$2为进流量 $10为出流量

awk 'BEGIN{

OFMT="%.3f";

devf="/proc/net/dev";

while(("cat "devf) | getline)

{

         #$0 ~ /:/ 匹配到“:”的行 !~为不匹配

         #$10为发送的字节数 ($10+0)转换为整数

    if($0 ~ /:/ && ($10+0) > 0)

    {

    #以“:”为分割符,存储到tarr数组里面

    #$1 lo:

    #split($1,tarr,":");

    #tarr[1]lo tarr[1...]为空

    #print tarr[1],tarr[2],tarr[3]

        #net[lo]=$10+tarr[2]; 发送的数据+0

        net[$1]=$10+$2;

        print $1,$10+$2;

    }

}

close(devf);

while((system("sleep 1 ")) >=0)

{

    system("clear");

    while( getline < devf )

    {

        if($0 ~ /:/ && ($10+0) > 0)

            {

              #  split($1,tarr,":");

                if($1 in net)

                {

                    print $1,($10+$2-net[$1])*8/1024,"kb/s";

                    net[$1]=$10+$2;

                }      

            }   

    }

    close(devf);

}

}'

 

注意:通过getline 逐行读取文件,需要close关闭 。否则在第2while循环中不能获得数据。

 

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