這篇文章主要講解了“怎么用shell和Python查看Linux服務器的網卡流量”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用shell和Python查看Linux服務器的網卡流量”吧!
有時我們需要較為實時的查看服務器上的網卡流量,這里我寫了兩個小腳本,一個用shell(先寫的,一次只能查看一個網卡),另一個用python(后寫的,一次可查看多個網卡)。
腳本中都用了while true“死循環”,每隔10s從“/proc/net/dev”中取一次值并根據10s內的差值計算10s內的平均帶寬;按ctrl+c停止執行。腳本兼容centos6和7
兩個腳本都不太復雜,而且腳本中注釋也比較細致,所以我就不過多解釋腳本內容了。
直接上圖上腳本:
shell版–使用截圖:
shell版代碼:
#!/bin/sh #by ljk 20160526 if [ "$1" = "" ];then #判斷后面是否有跟參數 echo -e "\n use interface_name after the script,like \"script eth0\"...\n" exit -1 fi echo -e "\n start monitoring the $1,press \"ctrl+c\" to stop" echo ---------------------------------------------------------- file=/proc/net/dev #內核網卡信息文件 while true do rx_bytes=`cat $file|grep $1|sed 's/^ *//g'|awk -f'[ :]+' '{print $2}'` #這里sed這一步為了同時兼容centos6和7 tx_bytes=`cat $file|grep $1|sed 's/^ *//g'|awk -f'[ :]+' '{print $10}'` sleep 10 rx_bytes_later=`cat $file|grep $1|sed 's/^ *//g'|awk -f'[ :]+' '{print $2}'` tx_bytes_later=`cat $file|grep $1|sed 's/^ *//g'|awk -f'[ :]+' '{print $10}'` #b*8/1024/1024=mb speed_rx=`echo "scale=2;($rx_bytes_later - $rx_bytes)*8/1024/1024/10"|bc` speed_tx=`echo "scale=2;($tx_bytes_later - $tx_bytes)*8/1024/1024/10"|bc` printf "%-3s %-3.1f %-10s %-4s %-3.1f %-4s\n" in: $speed_rx mb/s out: $speed_tx mb/s done
python版–使用截圖:
python版代碼:
#!/bin/env python3 #by ljk 20160526 import os,re,sys,time if len(sys.argv) == 1: print('\n使用方法:請跟上網卡名稱,可接"單個網卡"/"多個網卡,以空格分開".\n') sys.exit(100) else: print('start monitoring,press "ctrl+c" to stop\n') for arg in sys.argv[1:]: #輸出標頭 header = '------{} bandwidth(mb/s)------'.format(arg) print(header.ljust(35),end='') print() #global values_dic values_dic = {} #定義空字典,用來在下面函數中存放各網卡的各項需要用到的值 def get_values(orders): try: with open('/proc/net/dev') as f: lines=f.readlines() #內容不多,一次性讀取較方便 for arg in sys.argv[1:]: for line in lines: line=line.lstrip() #去掉行首的空格,以便下面split if re.match(arg,line): values = re.split("[ :]+",line) #以空格和:作為分隔符 values_dic[arg+'r'+orders]=values[1] #1為接收值 values_dic[arg+'t'+orders]=values[9] #9為發送值 #return [values[1],values[9]] #可返回列表 except (fileexistserror,filenotfounderror,permissionerror): print('open file error') sys.exit(-1) try: while true: get_values('first') #第一次取值 time.sleep(10) get_values('second') #10s后第二次取值 for arg in sys.argv[1:]: r_bandwidth = (int(values_dic[arg+'r'+'second']) - int(values_dic[arg+'r'+'first']))/1024/1024/10*8 t_bandwidth = (int(values_dic[arg+'t'+'second']) - int(values_dic[arg+'t'+'first']))/1024/1024/10*8 print('in: '+str(round(r_bandwidth,2)).ljust(8)+' out: '+str(round(t_bandwidth,2)).ljust(16),end='') print() values_dic = {} #清空本次循環后字典的內容 except keyboardinterrupt: print("\n-----bye-----")
感謝各位的閱讀,以上就是“怎么用shell和Python查看Linux服務器的網卡流量”的內容了,經過本文的學習后,相信大家對怎么用shell和Python查看Linux服務器的網卡流量這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。