學習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
這樣就實現了,網絡流量的監控。這種只是實現功能的一種辦法,還有許多種方式方法,例如函數等等。大家去完善吧!