首先放代碼如下所示
#!/bin/bash
cp /proc/net/dev tmp_dev1
sed -i '1,2d' tmp_dev1
while(true);do
sleep 1
cp /proc/net/dev tmp_dev2
sed -i '1,2d' tmp_dev2
clear
echo "*************************************************************************"
awk 'NR==FNR{a[$1]=$2+$9} NR!=FNR{a[$1]=a[$1]-$2-$9} END{for(i in a) printf("%-15s current speed is %.2f Mb/s %.2f kb/s \n", i, a[i]/1024/1024, a[i]/1024)}' tmp_dev2 tmp_dev1
echo "*************************************************************************"
mv -f tmp_dev2 tmp_dev1
done
結(jié)果如下所示:
*************************************************************************
tunl0: current speed is 0.00 Mb/s 0.00 kb/s
eth0: current speed is 0.00 Mb/s 0.00 kb/s
ip6tnl0: current speed is 0.00 Mb/s 0.00 kb/s
lo: current speed is 0.00 Mb/s 0.00 kb/s
*************************************************************************
所需知識(shí)要點(diǎn)
Linux 內(nèi)核提供了一種通過 /proc 文件系統(tǒng)适揉,在運(yùn)行時(shí)訪問內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)跷敬、改變內(nèi)核設(shè)置的機(jī)制。由于系統(tǒng)的信息,如進(jìn)程崎坊,是動(dòng)態(tài)改變的,所以用戶或應(yīng)用程序讀取proc文件時(shí)洲拇,proc文件系統(tǒng)是動(dòng)態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的奈揍。/proc文件系統(tǒng)中包含了很多目錄,其中/proc/net/dev 保存了網(wǎng)絡(luò)適配器及統(tǒng)計(jì)信息赋续。
root@803e41ac5ea4:~/tes# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth0: 26249010 18636 0 0 0 0 0 0 409951 7300 0 0 0 0 0 0
tunl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip6tnl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
最左邊的表示接口的名字男翰,Receive表示收包,Transmit表示發(fā)送包纽乱;
- bytes表示收發(fā)的字節(jié)數(shù)蛾绎;
- packets表示收發(fā)正確的包量;
- errs表示收發(fā)錯(cuò)誤的包量鸦列;
- drop表示收發(fā)丟棄的包量租冠;
則數(shù)據(jù)流量速度取得是發(fā)送和接收的字節(jié)數(shù)的量。取的間隔1s計(jì)算一次薯嗤。
流程圖如下
待更新顽爹。。骆姐。镜粤。。玻褪。