歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

利用shell網絡流量監控

學習shell告一段落。開始那種信心滿滿,學過後才知道shell博大精深。學到只是一點皮毛。祖師爺一再教誨:學習這個沒有什麼竅門。要多練習,要有思路。有了思路,就會有一個解決辦法。

今天課堂上討論了一個練習,如何利用shell每十秒統計一次網絡流量?

乍一聽,統計流量感覺好難,無從下手。但是在老師的指導下,逐漸有了思路。

首先要采集到網絡流量的數據。有了數據,求出流量差,就是網絡流量了。那麼數據去哪裡找呢?

開始學習linux我們經常使用到ifconfig這條命令,來查看那網卡信息,主要是ip地址。其實呢,這信息裡面就有通過當前網卡的數據流量。有發出的數據和收到的數據。

[root@www ~]# ifconfig eth0
 eth0      Link encap:Ethernet  HWaddr 00:0C:29:2F:59:46 
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe2f:5946/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:635 errors:0 dropped:0 overruns:0 frame:0
          TX packets:636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:62050 (60.5 KiB)  TX bytes:61036 (59.6 KiB)
          Interrupt:59 Base address:0x2024
 
 
那麼如何把需要的數據提取出來呢?
 
 [root@www ~]# ifconfig eth0|awk -F ":" 'NR==8{print $2,$3}'
 F=($2+$3)就是在這一時刻,網絡流量的總和。
 
間隔十秒在采集一次數據:S=($2+$3)。
 
計算兩次采集到的數據差(S-F)就可以得到,這期間的流量。那麼要每隔10s采集一次數據,怎麼實現呢?這個是作為流量監控,還要不停地循環下去。
 
#!/bin/bash
 
while true;do
 
F=`ifconfig eth0|awk -F ":" 'NR==8{print $2+$3}'`
      sleep 10
 
S=`ifconfig eth0|awk -F ":" 'NR==8{print $2+$3}'`
      echo  $[($S-$F)/1024]
 
done
 
這樣就實現了,網絡流量的監控。這種只是實現功能的一種辦法,還有許多種方式方法,例如函數等等。大家去完善吧!

Copyright © Linux教程網 All Rights Reserved