写一个实时监控网络流量的脚本

回复 收藏
提示: /proc/net/dev 文件显示的数字就是网络总流量,单位是B(字节)。 可以用当前时刻的数字减去上一秒的数字来求出每秒的网络流量。单位根据实际情况显示为KB或者MB。  而实时显示,只能使用while 做死循环,而且显示结果要一直在屏幕的第一行,可以使用clear实现。

参考脚本:

{{{密码回复可见}}}



2015-11-10 09:29 3 条评论 举报
已邀请:
0

gh0st

赞同来自:

{:4_92:}
0

十月鱼

赞同来自:

学习
0

漠林sky

赞同来自:

学习
0

蛀牙宅

赞同来自:

{:4_92:}
0

xuliang

赞同来自:

学习
0

Toornix

赞同来自:

看下答案
0

触摸纯白

赞同来自:

学习一下
0

Ezail

赞同来自:

来瞅瞅
0

zzfeng2012

赞同来自:

{:4_91:}
0

820009174

赞同来自:

学习
0

游荡易人

赞同来自:

了解一下
0

ggangelo

赞同来自:

while :
do
   rc=`cat /proc/net/dev|grep eth0|awk '{print $2}'`
   tc=`cat /proc/net/dev|grep eth0|awk '{print $10}'`
   sleep 1
   rc2=`cat /proc/net/dev|grep eth0|awk '{print $2}'`
   tc2=`cat /proc/net/dev|grep eth0|awk '{print $10}'`
   rjg=$[rc2-rc]
   tjg=$[tc2-tc]
   echo "receive=$rjg  transmit=$tjg"
   sleep 1
   clear
done
0

hegeng

赞同来自:

学习
0

rockycai

赞同来自:

学习
0

李磊

赞同来自:

学习学习
0

blackwang

赞同来自:

学习了
0

gys2016

赞同来自:

了解下
0

a1138665328

赞同来自:

看看
0

beafty

赞同来自:

这个得学习
0

cppc

赞同来自:

学习
0

throwman

赞同来自:

{:4_98:}
0

wanmei

赞同来自:

chouchou
0

cj2017

赞同来自:

{:4_105:}
0

hsm

赞同来自:

学习
0

jonnylin

赞同来自:

学习
0

wy1028

赞同来自:

学习
0

我爱我家

赞同来自:

答案
0

shc1985

赞同来自:

看看
0

陈龙

赞同来自:

学习
0

zhangpengpeng

赞同来自:

学习学习
0

dongdongchen

赞同来自:

了解了解
0

学习求生存 - openstack运维工程师

赞同来自:

学习来着
0

xmmixiangzhu

赞同来自:

学习一下
0

午夜DJ

赞同来自:

练习
0

zhangyuqing

赞同来自:

so
0

Bullet_Point

赞同来自:

1
0

李林

赞同来自:

学习
0

13600827194

赞同来自:

学习一下
0

且听风吟

赞同来自:

学习
0

13805775620

赞同来自:

学习学习
0

hmh

赞同来自:

Q
0

huanglin

赞同来自:

看看
0

毛智杰

赞同来自:

学习
0

wudi61

赞同来自:

学习
0

linuxcp

赞同来自:

{:4_91:}
0

gaofeng2456

赞同来自:

1
0

J_C

赞同来自:

#!/bin/bash
#
#提示: /proc/net/dev 文件显示的数字就是网络总流量,单位是B(字节)。 可以用当前时刻的数字减去上一秒的数字来求出每秒的网络流量。单位根据实际情况显示为KB或者MB。  而实时显示,只能使用while 做死循环,而且显示结果要一直在屏幕的第一行,可以使用clear实现。
a=2
int1=1024
int2=$((1024*1024))
while [ $a -gt 1 ]
do
  a=`cat /proc/net/dev|grep eth0|awk -F ":" '{print $2}'|awk '{print $1}'`
   sleep 1
  clear
  b=`cat /proc/net/dev|grep eth0|awk -F ":" '{print $2}'|awk '{print $1}'`
  c=$(($b-$a))
  if [ $c -le $int1 ]
  then
      echo $c"b"
  elif [ $c -gt $int1 ] && [ $c -le $int2 ]
  then
      E=$(($c/int1))
      echo $E"kb"
  elif [ $c -gt $int2 ]
  then
      E=$(($c/int2))
      echo $E"mb"
  fi
done
0

dessler

赞同来自:

刚开始自己写的,只考虑求的值,没考虑循环
求值的方法是先求得单位大小,然后对比单位大小
  1. #!/bin/bash
  2. #监控网卡实时流量
  3. rx=`cat /proc/net/dev |grep eth0 |awk '{print $1}'|awk -F: '{print $2}'`
  4. tx=`cat /proc/net/dev |grep eth0 |awk '{print $9}'`
  5. rx1=$(( $rx / 1024 ))
  6. rx2=$(( $rx1 /1024 ))
  7. tx1=$(( $tx / 1024 ))
  8. tx2=$(( $tx1 /1024 ))
  9. sleep 1
  10. rx3=`cat /proc/net/dev |grep eth0 |awk '{print $1}'|awk -F: '{print $2}'`
  11. tx3=`cat /proc/net/dev |grep eth0 |awk '{print $9}'`
  12. rx4=$(( $rx3 / 1024 ))
  13. rx5=$(( $rx4 /1024 ))
  14. tx4=$(( $tx3 / 1024 ))
  15. tx5=$(( $tx4 /1024 ))
  16. rx6=$(( $rx5 - $rx2 ))
  17. tx6=$(( $tx5 - $tx2 ))
  18. rx7=$(( $rx4 - $rx1 ))
  19. tx7=$(( $tx4 - $tx1 ))
  20. if [ $rx6 -le 0 ]; then
  21.         echo $rx7
  22. else
  23.         echo $rx6
  24. fi
  25. if [ $tx6 -le 0 ]; then
  26.         echo $tx7
  27. else
  28.         echo $tx6
  29. fi



后来参考其他同学的先对比大小,然后在换算为单位

  1. #!/bin/bash
  2. a=2
  3. int1=1024
  4. int2=$((1024*1024))
  5. while [ $a -gt 1 ]
  6. do
  7.   a=`cat /proc/net/dev|grep eth0|awk -F ":" '{print $2}'|awk '{print $1}'`
  8.   a1=`cat /proc/net/dev |grep eth0 |awk '{print $9}'`
  9.    sleep 1
  10.   clear
  11.   b=`cat /proc/net/dev|grep eth0|awk -F ":" '{print $2}'|awk '{print $1}'`
  12.   b1=`cat /proc/net/dev |grep eth0 |awk '{print $9}'`
  13.   c=$(($b-$a))
  14.   c1=$(($b1-$a1))
  15.   if [ $c -le $int1 ]
  16.   then
  17.       echo RX:$c"b"
  18.   elif [ $c -gt $int1 ] && [ $c -le $int2 ]
  19.   then
  20.       E=$(($c/int1))
  21.       echo RX:$E"kb"
  22.   elif [ $c -gt $int2 ]
  23.   then
  24.       E=$(($c/int2))
  25.       echo RX:$E"mb"
  26.   fi
  27.   if [ $c1 -le $int1 ]
  28.   then
  29.       echo TX:$c1"b"
  30.   elif [ $c1 -gt $int1 ] && [ $c1 -le $int2 ]
  31.   then
  32.       E1=$(($c1/int1))
  33.       echo TX:$E1"kb"
  34.   elif [ $c1 -gt $int2 ]
  35.   then
  36.       E1=$(($c1/int2))
  37.       echo TX:$E1"mb"
  38.   fi
  39. done


但是这个求得值是流量,并非带宽,如果换算带宽还要*8
但是和iftop 获得的值还是有区别,就算*8以后  不知道怎么回事
0

xgmxm

赞同来自:

学习
0

kevinjin

赞同来自:

看看
0

15812926028

赞同来自:

look
0

巅峰战天

赞同来自:

学习下
0

ryanlin

赞同来自:

xuexi
0

xigua

赞同来自:

学习一下
0

leewillxlw

赞同来自:

。。。。。
0

冷凌

赞同来自:

look
0

zhangyanlong

赞同来自:

111
0

有人喜欢蓝

赞同来自:

看看答案

0

liupeng

赞同来自:

学习

0

kw是id

赞同来自:

真心不会写 看看

0

安文龙

赞同来自:

学习

0

Ject1992he - linux学习

赞同来自:

学习

0

大雁

赞同来自:

学习下

0

王斌

赞同来自:

#! /bin/bash

#Auth: Cityzen Wang

#Date: 2017-05-04

#Scriptes: Monitoring Network Traffic real time.

while :

do

    a=`cat /proc/net/dev | grep eth0| awk '{print $1}'| awk -F ':' '{print $2}'`

    sleep 1

    b=`cat /proc/net/dev | grep eth0| awk '{print $1}'| awk -F ':' '{print $2}'`

    c=$[$b-$a]

    clear

    echo "Network Traffic is $c"

done

0

杨银根

赞同来自:

#!/bin/bash

n=`cat /proc/net/dev|grep 'eth0'|awk '{print $3}'`

while :

do

    sleep 1

    m=`cat /proc/net/dev|grep 'eth0'|awk '{print $3}'`

    t=$[$m-$n]

    if [ $t -gt 1024  ]

    then

         t=$[$t/1024]

         echo "                               每秒网络流量:${t}MB"

    fi

         echo "                               每秒网络流量:${t}KB"

    sleep 2

    clear

done

0

小二

赞同来自:

学习

0

windysai

赞同来自:

学习

0

songyi123

赞同来自:

学习

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: