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

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

参考脚本:

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



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

ZHAOFUYUN

赞同来自:

+1
0

xzzlamp

赞同来自:

看看
0

HMOM

赞同来自:

学习
0

奋斗的种子

赞同来自:

看看
0

zhpro

赞同来自:

了解下
0

pipihei

赞同来自:

突击shell中
0

北辰星

赞同来自:

学习
0

miaojianbo

赞同来自:

11
0

我是学渣

赞同来自:

{:4_99:}
0

tonyklose

赞同来自:

监控看看咯
0

陈秋明

赞同来自:

kankan
0

snake

赞同来自:

学习
0

echo

赞同来自:

学习
0

wsw13640218682

赞同来自:

本帖最后由 wsw13640218682 于 2016-2-15 10:11 编辑

#!/bin/bash
#network
#Steven.Wang
while : ; do
      time=`date +%m'-'%d" "%k':'%M`
      rx_bef=`ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-`
      tx_bef=`ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-`
      sleep 2
      rx_aft=`ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-`
      tx_aft=`ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-`
      rx_result=$[(rx_aft-rx_bef)/256]
      tx_result=$[(tx_aft-tx_bef)/256]
      echo "$time Now_In_Speed: "$rx_result"kbps Now_OUt_Speed: "$tx_result"kbps"
      sleep 2
done
0

fish

赞同来自:

学习   
0

hi_tomorrow

赞同来自:

xuexi
0

bbcw

赞同来自:

看看怎么把值取出,一直想不出来
0

oszhang

赞同来自:

1
0

oszhang

赞同来自:

1
0

lin13750529011

赞同来自:

谢谢
0

方琪

赞同来自:

1
0

onlyweeds

赞同来自:

求解
0

唯一V

赞同来自:

学习
0

435664265

赞同来自:

学习
0

蔡炳森

赞同来自:

#!/bin/bash
while :
do
m=`cat /proc/net/dev |grep eth0 |awk -F' ' '{print $2}'`
echo $m
m1=$[$m/1024]
sleep 1
n=`cat /proc/net/dev |grep eth0 |awk -F' ' '{print $2}'`
n1=$[$n/1024]
n3=$[$n1-$m1]
echo $n
echo "您已经使用了$n3 kb的流量"
sleep 2
clear
done
0

ヾSun

赞同来自:

看一下
0

泡沫。

赞同来自:

ddd
0

不怕不怕

赞同来自:

学习
0

liushuangwei

赞同来自:

学习了学习了
0

言尽

赞同来自:

看到需要的了
0

xianwanzhou

赞同来自:

{:4_91:}
0

自己定义

赞同来自:

学习学习
0

自己定义

赞同来自:

xue'xi
0

宇浩

赞同来自:

let me 瞅瞅
0

宇浩

赞同来自:

还没学到看得晕晕的
0

branttsai

赞同来自:

学习学习下。
0

zhangdailu

赞同来自:

学习
0

jinm

赞同来自:

学习
0

乐橙306

赞同来自:

1
0

clq56688

赞同来自:

{:4_91:}
0

Sniper

赞同来自:

学习
0

cxiaodian

赞同来自:

good
0

大喵喵66

赞同来自:

sh:
  1. #!/bin/bash

  2. ## 单位转换
  3. kb=1024
  4. mb=1048576
  5. gb=1073741824

  6. ## 处理命令行参数
  7. if [[ $# -gt 1 || ($# -eq 1 && $1 != "-h") ]]; then
  8.         echo "usage: `basename $0` [-h]"
  9.         exit 1
  10. fi

  11. ## 用数组存储不同网络设备的数据
  12. flow_sec(){
  13.         arr_dev=($(cat /proc/net/dev |awk '/[0-9]/{print $1}'))
  14.         arr_rec1=($(cat /proc/net/dev |awk '/[0-9]/{print $2}'))
  15.         arr_tra1=($(cat /proc/net/dev |awk '/[0-9]/{print $10}'))
  16.         sleep $1
  17.         arr_rec2=($(cat /proc/net/dev |awk '/[0-9]/{print $2}'))
  18.         arr_tra2=($(cat /proc/net/dev |awk '/[0-9]/{print $10}'))
  19.         ## 必须在间隔时间后清屏
  20.         clear
  21. }

  22. ## 显示人类可读的单位
  23. human_fmt(){
  24.         if [[ $1 -lt $kb ]]; then
  25.                 tmp="$1"B
  26.         elif [[ $1 -ge $kb && $1 -lt $mb ]]; then
  27.                 tmp=`expr $1 / $kb`KB
  28.         elif [[ $1 -ge $mb && $1 -lt $gb ]]; then
  29.                 tmp=`expr $1 / $mb`MB
  30.         else
  31.                 tmp=`expr $1 / $gb`GB
  32.         fi
  33. }

  34. ## 主循环
  35. while :; do
  36.         idx=0
  37.         flow_sec 1
  38.         echo "DEVICE RECEIVE TRANSMIT"
  39.         for i in ${arr_dev[@]}; do
  40.                 rec=`expr ${arr_rec2[$idx]} - ${arr_rec1[$idx]}`
  41.                 tra=`expr ${arr_tra2[$idx]} - ${arr_tra1[$idx]}`
  42.                 if [[ $1 == "-h" ]]; then
  43.                         human_fmt $rec; rec=$tmp
  44.                         human_fmt $tra; tra=$tmp
  45.                         echo "$i $rec, $tra"
  46.                 else
  47.                         echo "$i $rec, $tra"
  48.                 fi
  49.                 let idx++
  50.         done
  51. done




0

咸鱼吃Linux

赞同来自:

学习
0

酷梦心扉

赞同来自:

学习下
0

alvinnull

赞同来自:

xuexi
0

何朝晖

赞同来自:

学习啦···
0

wangzai

赞同来自:

学习
0

duyanbin

赞同来自:

学习学习
0

qq895933723

赞同来自:

看看
0

weifan

赞同来自:

学习
0

kevin_tao

赞同来自:

学习一下
0

lerchi

赞同来自:

学习
0

laomiao

赞同来自:

学习
0

两天

赞同来自:

学习
0

xiaoweili

赞同来自:

这个要学习
0

王思彦

赞同来自:

{:4_91:}
0

we14578

赞同来自:

看下
0

we14578

赞同来自:

老师的脚本有点地方错了:echo  -e  "\t RX `date +%k:%M:%S` TX" 这句写错了
0

timfeng3535

赞同来自:

asdfasdfadsf
0

timfeng3535

赞同来自:

asdfasdfasdfasdf
0

lh3526648

赞同来自:

看看
0

杜治川

赞同来自:

+1
0

397705152

赞同来自:

看一下
0

flyingfishzxf

赞同来自:

学习一下
0

liulangren0533

赞同来自:

学习一下。
0

shoswj001

赞同来自:

xue
0

youlianqing

赞同来自:

学习
0

等风来

赞同来自:

看看
0

最终幻想

赞同来自:

学习
0

m.chang

赞同来自:

这个应该咱们在监控那一部分有讲的,基本思路是一样的。
0

SunyBome

赞同来自:

答案
0

wangxinpeng

赞同来自:

看看
0

jxcia2018

赞同来自:

#!/bin/bash
##
while :;do
a=`cat /proc/net/dev|grep eth0|awk '{print $10}'`
sleep 1
b=`cat /proc/net/dev|grep eth0|awk '{print $10}'`
c=$[$b-$a]
clear
echo "$c"

done
0

xufanyunwei

赞同来自:

学习
0

郭贞

赞同来自:

{:4_91:}
0

qq495966654

赞同来自:

学习下
0

渐行渐远

赞同来自:

学习
0

CNS2016

赞同来自:

学习
0

lin790292154

赞同来自:

学习
0

xsonboy

赞同来自:

学习
0

阿杰

赞同来自:

1
0

圣手书生

赞同来自:

xuexi
0

xzzlamp

赞同来自:

#!/bin/bash
while :
do
m=`cat /proc/net/dev |grep eth0 |awk -F' ' '{print $2}'`
echo $m
m1=$[$m/1024]
sleep 1
n=`cat /proc/net/dev |grep eth0 |awk -F' ' '{print $2}'`
n1=$[$n/1024]
n3=$[$n1-$m1]
echo $n
echo "您已经使用了$n3 kb的流量"
sleep 2
clear
done
0

nihao426181

赞同来自:

^^
0

15801184208

赞同来自:

看看
0

小杰

赞同来自:

{:4_91:}
0

monga

赞同来自:

学习学习
0

luckytodd

赞同来自:

#!/bin/bash
#输出每秒的网卡流量,并实时显示,并且结果要一直显示在屏幕第一行
function result(){
nat_old=`cat /proc/net/dev|grep 'eth0'|awk '{print $2}'`
nat_kbo=`expr $nat_old / 1024`
t_old=`date +%s`
#echo "`date +%s` 流量 is " $nat_kb MB
t_new=`date -d "+1 sec" +%s`
nat_new=`cat /proc/net/dev|grep 'eth0'|awk '{print $2}'`
nat_kbn=`expr $nat_new / 1024`

t_between=`expr $t_new - $t_old`
nat_between=`expr $nat_new - $nat_old`
nat_new=`expr $nat_between / $t_between`
clear
echo "time at `date +%s`  nat is" $nat_new kb.
}

while :
do
  result
done
0

星空的衣角

赞同来自:

学习下
0

elvis

赞同来自:

ddd
0

一笑而过

赞同来自:

过来学习啦
0

tytywu

赞同来自:

学习
0

linuxjishuren

赞同来自:

流量也也有文件
0

loveangeler

赞同来自:

make
0

zmh0415

赞同来自:

while :; do
      a=(`cat /proc/net/dev |grep eth3| awk  '{print $2,$10 }'`)
      sleep 1
      b=(`cat /proc/net/dev |grep eth3| awk  '{print $2,$10 }'`)
      c=$[${b[0]}-${a[0]}]
      d=$[${b[1]}-${a[1]}]
      echo "Receive:$c   Transmit:$d"
      sleep 1
      clear

  done

0

xpgong

赞同来自:

kankan
0

dongteng

赞同来自:

学习
0

jokerhuman

赞同来自:

huifu
0

Linux-lucky

赞同来自:

{:4_92:}{:4_103:}

回复帖子,请先登录注册

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