shell指令碼 awk實現實時監控網絡卡流量
阿新 • • 發佈:2021-12-10
一.簡介
通過第3方工具獲得網絡卡流量,這個大家一定很清楚。其實通過指令碼一樣可以實現效果。下面是我個人工作中整理的資料。以下是shell指令碼統計網絡卡流量。
現原理:
cat /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo:1068205690 1288942839 0 0 0 0 0 0 1068205690 1288942839 0 0 0 0 0 0 eth0:91581844 334143895 0 0 0 0 0 145541676 4205113078 3435231517 0 0 0 0 0 0 proc/net/dev 檔案儲存了網絡卡總流量資訊,通過間隔一段間隔,將入網絡卡與出記錄加起來。減去之前就得到實際速率。
二.使用
適用:centos6+
語言:英文
注意:慎用,沒法ctl + c終止,要退出終端
本文版權歸作者所有,歡迎轉載,請務必新增原文連結。#說明:第一個while 是獲得總的初始值,$1是網絡卡出流量,$10是網絡卡進流量。第2個while會間隔1秒鐘啟動一次。計算總流量差得到平均每秒流量。 #注意:通過getline 逐行讀取檔案,需要close關閉 。否則在第2次while迴圈中不能獲得資料。 awk 'BEGIN{ OFMT="%.3f"; devf="/proc/net/dev"; while(("cat "devf) | getline) { if($0 ~ /:/ && ($10+0) > 0) { split($1,tarr,":"); net[tarr[1]]=$10+tarr[2]; print tarr[1],$10+tarr[2]; } } close(devf); while((system("sleep 1 ")) >=0) { system("clear"); while( getline < devf ) { if($0 ~ /:/ && ($10+0) > 0) { split($1,tarr,":"); if(tarr[1] in net) { print tarr[1],":",($10+tarr[2]-net[tarr[1]])*8/1024,"kb/s"; net[tarr[1]]=$10+tarr[2]; } } } close(devf); } }'