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

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

参考脚本:

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



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

kuruite

赞同来自:

了解下
0

balich

赞同来自:

学习
0

sunxueyong

赞同来自:

knakan
0

huguihua2002

赞同来自:

look
0

定海偶然

赞同来自:

瞅瞅
0

xteplinux

赞同来自:

看看
0

wzwyql

赞同来自:

学习
0

吴冬冬

赞同来自:

学习
0

linux6688

赞同来自:

165941651
0

小指头

赞同来自:

学习
0

xieqilang

赞同来自:

{:4_91:}
0

吴天瑞

赞同来自:

学习
0

他们叫我潮汐

赞同来自:

学习学习
0

hlymlv

赞同来自:

看看
0

linux_xiaoan

赞同来自:

学习!
0

贾刚

赞同来自:

12123121313213
0

温柔的笑猫

赞同来自:

seesee
0

Edison

赞同来自:

学习下
0

fansze

赞同来自:

0

乔夫

赞同来自:

呀呀呀
0

Linuxpp

赞同来自:

找工作必备
0

等不到天黑

赞同来自:

make
0

梁子健

赞同来自:

学习
0

杭州小白

赞同来自:

kankan
0

krven

赞同来自:

1
0

krven

赞同来自:

#!/bin/sh
while [ "1" ]
do
eth=$1
RXp=`cat /proc/net/dev |grep $eth|tr : " " |awk '{print $2}'`
TXp=`cat /proc/net/dev |grep $eth|tr : " " |awk '{print $10}'`
sleep 1
RXn=`cat /proc/net/dev |grep $eth|tr : " " |awk '{print $2}'`
TXn=`cat /proc/net/dev |grep $eth|tr : " " |awk '{print $10}'`
RX=`expr $RXn - $RXp`
TX=`expr $TXn - $TXp`
clear
echo -e "$eth RX $RX bye TX $TX bye"
done
0

757231338

赞同来自:

look
0

五弊三缺

赞同来自:

使用clear实现
0

googleqicq

赞同来自:

看看
0

汤小东

赞同来自:

learn
0

J!_yuan

赞同来自:

学习
0

lky

赞同来自:

学习
0

乌贼的帽子

赞同来自:

学习
0

lky

赞同来自:

铭哥我脚本中
RX=$((${RXnext}-${RXpre}))
TX=$((${TXnext}-${TXpre}))
改成
RX=$((RXnext-RXpre))
  TX=$((TXnext-TXpre))
才可以正常运行,是不是语法有错误?
0

Wadih

赞同来自:

学习下
0

xebszw

赞同来自:

{:4_95:}
0

yangjian319

赞同来自:

学习一下。
0

yanggang

赞同来自:

瞧瞧
0

ldp840611

赞同来自:

看看
0

vanjle

赞同来自:


学习下
0

杏雨秋枫

赞同来自:

看看
0

18051211319

赞同来自:

学习下 感觉这很有用
0

18051211319

赞同来自:

学习下 感觉这很有用
0

xueyongbo

赞同来自:

参考
0

boy461205160

赞同来自:

学习下
0

jimmyliang

赞同来自:

take a look
0

Burgess

赞同来自:

来学习了
0

HwangChen

赞同来自:

看看
0

minlyf

赞同来自:

#!/bin/bash

while true;do
s1=`grep 'eth0' /proc/net/dev|awk '{print $10}'`
sleep 1
s2=`grep 'eth0' /proc/net/dev|awk '{print $10}'`
s3=$[$s2-$s1]
echo $s3
done
一直显示 clear放哪呢
0

王焱峰

赞同来自:

看看
0

伽蓝寺

赞同来自:

学习下
0

yxf1018614769

赞同来自:

1
0

zql254

赞同来自:

看看
0

zql254

赞同来自:

  1 #!/bin/bash
  2 ##
  3 ##
  4 ##
  5
  6 old=0
  7 while :;do
  8      a=(`cat /proc/net/dev|grep "eth0"`)
  9      b=$[ ${a[9]} - $old ]
10      clear
11      echo "$[$b/1024] kb/s"
12      old=${a[9]}                                                            
13      sleep 1
14 done
0

15012600075

赞同来自:

学习
0

超大大

赞同来自:

正需要,学习
0

追风者

赞同来自:

.。。
0

oneliang

赞同来自:

1
0

hzsnone

赞同来自:

看帖回复
0

1101066558

赞同来自:

#!/bin/bash

PrevF=`awk -F ":" '{print $2}' /proc/net/dev | tail -1 | awk '{print $1}'`

while :; do
        sleep 1
        NOWF=`awk -F ":" '{print $2}' /proc/net/dev | tail -1 | awk '{print $1}'`
        NetFlow=$[$NOWF-$PrevF]
        PrevF=NOWF
        echo $NetFlow
done
0

zxc123

赞同来自:

看看
0

369666951

赞同来自:

看看
0

qin521ne

赞同来自:

look
0

qiaoxin360

赞同来自:

  1. #!/bin/bash
  2. while true;do
  3.     all_last=`cat /proc/net/dev | awk '/wlan0/{print $2}'`
  4.     sleep 1 && clear
  5.     all_now=`cat /proc/net/dev | awk '/wlan0/{print $2}'`
  6.     speed=$[$all_now-$all_last]
  7.     echo $speed B/s
  8. done
0

Remember犬牙

赞同来自:

对比下
0

zhangzihao

赞同来自:

123
0

qiqige

赞同来自:

学习
0

考鸡蛋

赞同来自:

本帖最后由 考鸡蛋 于 2015-12-26 22:49 编辑
  1. #!/bin/bash
  2. while :

  3. do
  4.         
  5.         a1=`grep 'eth0' /proc/net/dev | awk -F ' ' '{print $2}'`
  6.         a2=`grep 'eth0' /proc/net/dev | awk -F ' ' '{print $10}'`
  7.         
  8.         sleep 1
  9.         
  10.         b1=`grep 'eth0' /proc/net/dev | awk -F ' ' '{print $2}'`
  11.         b2=`grep 'eth0' /proc/net/dev | awk -F ' ' '{print $10}'`

  12.         c1=$(($b1-$a1))
  13.         c2=$(($b2-$a2))
  14.         
  15.         #输出到屏幕,注意clear不能置于echo下,否则屏幕只闪烁看不到输出  
  16.         #clear
  17.         #echo `date '+%F %H:%M:%S'` eth0 Receive $c1  Transmit $c2
  18.         #
  19.         #
  20.         #将输出重定向到文件
  21.         [ -d /tmp/log ]|| mkdir /tmp/log
  22.         cd /tmp/log
  23.         
  24.         echo `date '+%F %H:%M:%S'` eth0 Receive $c1  Transmit $c2 >> ./network.log
  25. done


less /tmp/log/network.log

2015-12-26 22:36:04 eth0 Receive 270 Transmit 770
2015-12-26 22:36:05 eth0 Receive 120 Transmit 716
2015-12-26 22:36:06 eth0 Receive 392 Transmit 1046
2015-12-26 22:36:07 eth0 Receive 346 Transmit 1014
2015-12-26 22:36:08 eth0 Receive 240 Transmit 716
2015-12-26 22:36:09 eth0 Receive 180 Transmit 716
2015-12-26 22:36:10 eth0 Receive 180 Transmit 716
2015-12-26 22:36:11 eth0 Receive 120 Transmit 716
2015-12-26 22:36:12 eth0 Receive 120 Transmit 716
2015-12-26 22:36:13 eth0 Receive 180 Transmit 716
2015-12-26 22:36:14 eth0 Receive 120 Transmit 716
2015-12-26 22:36:15 eth0 Receive 120 Transmit 838
2015-12-26 22:36:16 eth0 Receive 346 Transmit 870
2015-12-26 22:36:17 eth0 Receive 512 Transmit 1812
2015-12-26 22:36:18 eth0 Receive 120 Transmit 716
2015-12-26 22:36:19 eth0 Receive 60 Transmit 504
2015-12-26 22:36:20 eth0 Receive 180 Transmit 716
2015-12-26 22:36:21 eth0 Receive 180 Transmit 716
2015-12-26 22:36:23 eth0 Receive 180 Transmit 626
2015-12-26 22:36:24 eth0 Receive 346 Transmit 918
2015-12-26 22:36:25 eth0 Receive 60 Transmit 716
2015-12-26 22:36:26 eth0 Receive 240 Transmit 716

单位根据实际情况显示为KB或者MB,没有头绪!!!!
        
0

wsw13640218682

赞同来自:

需要看一看
0

loveyouhyf

赞同来自:

minlyf 发表于 2015-12-9 15:13
#!/bin/bash

while true;do

放在echo $s3的上一行
0

weifeng1463

赞同来自:

ok

0

Landon

赞同来自:

a's'd
0

andreking

赞同来自:

学习下
0

malong

赞同来自:

学习一下
0

prospect

赞同来自:

#!/bin/sh

while true
do
        one=`cat /proc/net/dev |grep eth0 | awk '{print $2}'`
        sleep 1
        two=`cat /proc/net/dev |grep eth0 | awk '{print $2}'`
        Av=$[ two - one ]
        echo "The Average is $Av B."
        clear
done
0

andreking

赞同来自:

while [ "1" ]   是什么意思
0

出VU时代

赞同来自:

看一下
0

summer123

赞同来自:

学习
0

summer123

赞同来自:

很好,赞!
0

simle

赞同来自:

查看
0

shitukeji

赞同来自:

复习中
0

rarcher

赞同来自:

看看
0

casparcc

赞同来自:

学习学习
0

千夜

赞同来自:

回复了看看
0

inzaghidai

赞同来自:

学习
0

skylake_

赞同来自:

看看
0

t0ny1988

赞同来自:

#!/bin/bash
while :
do
  eth0a=`grep eth0 /proc/net/dev |awk -F ' ' {'print $2'}`
  eth0b=`grep eth0 /proc/net/dev |awk -F ' ' {'print $10'}`

  sleep 1

  eth0aa=`grep eth0 /proc/net/dev |awk -F ' ' {'print $2'}`
  eth0bb=`grep eth0 /proc/net/dev |awk -F ' ' {'print $10'}`

  eth0in=$((($eth0aa-$eth0a)/1024))
  eth0out=$((($eth0bb-$eth0b)/1024))

clear
echo "eth0 in $eth0in kb/s eth0 out $eth0out kb/s"
done
0

licengceng

赞同来自:

学习
0

Hyman1105

赞同来自:

学习了啊
0

qwerthink

赞同来自:

学习一下
0

yu7667073

赞同来自:

什么命令来观察呢
0

xiaoqing757

赞同来自:

学习
0

chiang1213

赞同来自:

学习
0

thedawn

赞同来自:

1
0

guojianrui0512

赞同来自:

{:4_91:}
0

大漠之烟

赞同来自:

{:4_91:}
0

刘亚萌

赞同来自:

looklook
0

刘亚萌

赞同来自:

looklook
0

lin19890913

赞同来自:

看看
0

落涧飞鹰

赞同来自:

看看

回复帖子,请先登录注册

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