利用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
这样就实现了,网络流量的监控。这种只是实现功能的一种办法,还有许多种方式方法,例如函数等等。大家去完善吧!