LINUX下查看网卡流量的脚本(完美修改版)

By | 12月14日
Advertisement

转载自 mnsch

最终编辑 wangpeng168

修改内容:

  • 修复了会显示负数的问题
  • 增加了bits/s的统计情况
  • 增加了最后的汇总平均值

#!/bin/bash
# osdba 2008.10.22 monitor the interface's network traffic.
# Zeuslion 2009.08.29.
if [ $# -ne 3 ];then
echo Useage : $0 interface interval count
echo Example: $0 eth0 2 10
exit
fi
eth=$1
count=$3
interval=$2
inbytesfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $2}')
if [ -z "$inbytesfirst" ];then
echo The network interface $eth is not exits!
exit 1;
fi
outbytesfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $10}')
inpacketsfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $3}')
outpacketsfirst=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $11}')
sleep $interval"s"
i=0
while [ "$i" -lt "$count" ]
do
inbytesend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $2}')
outbytesend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $10}')
inpacketsend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $3}')
outpacketsend=$(cat /proc/net/dev |tr ':' ' '|awk '/'$eth'/{print $11}')

bytesin=$(($inbytesend-$inbytesfirst))
bytesout=$(($outbytesend-$outbytesfirst))
packetsin=$(($inpacketsend-$inpacketsfirst))
packetsout=$(($outpacketsend-$outpacketsfirst))

if [ "$bytesin" -lt "0" ];then
bytesin=$((4294967295-$inbytesfirst+$inbytesend))
#echo bytesin $bytesin $inbytesfirst $inbytesend
fi
if [ "$bytesout" -lt "0" ];then
bytesout=$((4294967295-$outbytesfirst+$outbytesend))
#echo bytesout $bytesout $outbytesfirst $outbytesend
fi
if [ "$packetsin" -lt "0" ];then
packetsin=$((4294967295-$inpacketsfirst+$inpacketsend))
#echo packetsin $packetsin $inpacketsfirst $inpacketsend
fi
if [ "$packetsout" -lt "0" ];then
packetsout=$((4294967295-$outpacketsfirst+$outpacketsend))
#echo packetsout $packetsout $outpacketsfirst $outpacketsend
fi

bytesin=$(($bytesin/$interval))
bytesout=$(($bytesout/$interval))
packetsin=$(($packetsin/$interval))
packetsout=$(($packetsout/$interval))

sumbytesin=$(($sumbytesin+$bytesin))
sumbytesout=$(($sumbytesout+$bytesout))
sumpacketsin=$(($sumpacketsin+$packetsin))
sumpacketsout=$(($sumpacketsout+$packetsout))

if [ $(($i%20)) -eq 0 ];then
echo " ifname | in_kbits/s out_kbits/s | in_kBytes/s out_kBytes/s | in_packets/s out_packets/s"
echo "--------- | ---------- ----------- | ----------- ------------ | ------------ -------------"
fi
echo $eth $bytesin $bytesout $packetsin $packetsout |awk '{printf("%9s | %10d %11d | %11d %12d | %12d %13d\n",$1,$2/128,$3/128,$2/1024,$3/1024,$4,$5)}'
inbytesfirst=$inbytesend
outbytesfirst=$outbytesend
inpacketsfirst=$inpacketsend
outpacketsfirst=$outpacketsend

i=$(($i+1))
sleep $interval"s"
done

sumbytesin=$(($sumbytesin/$i))
sumbytesout=$(($sumbytesout/$i))
sumpacketsin=$(($sumpacketsin/$i))
sumpacketsout=$(($sumpacketsout/$i))

echo "--------- | ---------- ----------- | ----------- ------------ | ------------ -------------"
echo Average $sumbytesin $sumbytesout $sumpacketsin $sumpacketsout |awk '{printf("%9s | %10d %11d | %11d %12d | %12d %13d\n",$1,$2/128,$3/128,$2/1024,$3/1024,$4,$5)}'

输出示例:

[root@localhost nat]# ./ifstat.sh eth1 2 5
ifname | in_kbits/s out_kbits/s | in_kBytes/s out_kBytes/s | in_packets/s out_packets/s
--------- | ---------- ----------- | ----------- ------------ | ------------ -------------
eth1 | 204743 112824 | 25592 14103 | 38459 38172
eth1 | 212353 111547 | 26544 13943 | 39025 38152
eth1 | 204263 114007 | 25532 14250 | 38802 38233
eth1 | 208357 111877 | 26044 13984 | 38706 38123
eth1 | 215614 113400 | 26951 14175 | 39950 39375
--------- | ---------- ----------- | ----------- ------------ | ------------ -------------
Average | 209066 112731 | 26133 14091 | 38988 38411

Similar Posts:

  • LINUX下查看网卡流量的脚本(完美修改版)【转】

    LINUX下查看网卡流量的脚本(完美修改版) 修复了会显示负数的问题 增加了bits/s的统计情况 增加了最后的汇总平均值 #!/bin/bash # osdba 2008.10.22 monitor the interface's network traffic. # Zeuslion 2009.08.29. if [ $# -ne 3 ];then echo Useage : $0 interface interval count echo Example: $0 eth0 2 10 exi

  • Linux下查看网卡流量的工具

    工具运行效果如下: #iftop eth0 1 3 ifname in_bytes/s out_bytes/s total_bytes/s eth0 446 418 864 eth0 70 182 252 eth0 70 182 252 脚本内容如下: #!/bin/bash # osdba 2009.10.22 monitor the interface's network traffic. if [ $# -ne 3 ];then echo example: $0 eth0 1 10 exi

  • linux下监视网卡流量的一段脚本

    linux下监视网卡流量的一段脚本: #! /bin/bash # 2008-8-19 we need to monitor streams of LTS channels, so write this script typeset out out_old dif_out in_old=$(cat /proc/net/dev | grep eth0 | sed 's=^.*:==' | awk '{ print $1 }' ) out_old=$(cat /proc/net/dev | grep

  • ubuntu 下查看网卡流量速度

    1. sar命令可实时查看网卡速度 sudo apt-get install sysstat sar -n DEV 1 DEV 表示查看网络链接速度 1 表示 每隔一秒刷统计一次速度 2. 另外可以在tagsmanger(系统监视器)上用图形界面查看当前网卡速度 3. dstat命令 sudo apt-get install dstat alias dstat='dstat -cdlmnpsy' 执行dstat 输出如下: usr sys idl wai hiq siq| read writ|

  • Linux 下查看网卡硬件信息

    [root@wds ~]# ethtool -i eth0 driver: pcnet32 version: 1.31 firmware-version: bus-info: 0000:00:11.0 [root@wds ~]# ethtool -k eth0 Offload parameters for eth0: Cannot get device rx csum settings: Operation not supported rx-checksumming: off tx-checks

  • (转)查看网卡流量shell脚本工具

    http://www.mysqlops.com/2011/10/19/network-top.html

  • Linux 下实现网卡高可用性的几种方法

    在当前的 IBM eServer xSeries 服务器产品中,有很多产品都集成了的千兆以太网卡,另外,在 xSeries 服务器产品的选件中,也提供了多种可以选配的以太网卡的选件,而当一台服务器配置了多块以太网卡时,我们通常都会考虑把多块网卡绑定在一起,做为一个网卡来使用,以此来提高网络的可用性和性能.对于 Windows 操作系统下,Intel 公司提供了 PROSet 工具来实现,Broadcom 公司提供了 BASP (Broadcom Advanced Server Program)

  • Linux下设置网卡

    相关文章 Linux下设置网卡的速率和模式: mii-tool -F 100baseTx-FD eth0 #把网卡eth0设置为100M的全双工模式 还可以用: ethtool: ethtool -s eth0 speed 100 duplex full autoneg on 查看机器上的网卡设备: lspci :查看机器上的PCI设备.因为现在的网卡设备基本上是PCI的,所以可以用此命令查看. 查看已有的驱动程序: dmesg: 驱动程序库的位置: KVER := $(shell uname

  • linux下查看网卡信息及状态http://www.j3j5.com/post-267.html

    Linux下查看网卡信息(转载) 1) 通过mii-tool指令 [root@localhost root]# mii-tool eth0: negotiated 100baseTx-FD, link ok eth1: no link 或 [root@localhost root]# mii-tool -v eth0: negotiated 100baseTx-FD, link ok product info: vendor 00:50:43, model 2 rev 3 basic mode:

  • Linux下多网卡MAC配置问题

    HWADDR=, 其中 以AA:BB:CC:DD:EE:FF形式的以太网设备的硬件地址.在有多个网卡设备的机器上,这个字段是非常有用的,它保证设备接口被分配了正确的设备名,而不考虑每个网卡模块被配置的加载顺序.这个字段不能和MACADDR一起使用. MACADDR=, 其中 以AA:BB:CC:DD:EE:FF形式的以太网设备的硬件地址.在有多个网卡设备的机器上.这个字段用于给一个接口分配一个MAC地址,覆盖物理分配的MAC地址. 这个字段不能和HWADDR一起使用. 前者是用来根据HWADDR

Tags: