溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用shell和Python查看Linux服務器的網卡流量

發布時間:2022-05-09 10:19:46 來源:億速云 閱讀:266 作者:iii 欄目:大數據

這篇文章主要講解了“怎么用shell和Python查看Linux服務器的網卡流量”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用shell和Python查看Linux服務器的網卡流量”吧!

有時我們需要較為實時的查看服務器上的網卡流量,這里我寫了兩個小腳本,一個用shell(先寫的,一次只能查看一個網卡),另一個用python(后寫的,一次可查看多個網卡)。

腳本中都用了while true“死循環”,每隔10s從“/proc/net/dev”中取一次值并根據10s內的差值計算10s內的平均帶寬;按ctrl+c停止執行。腳本兼容centos6和7

兩個腳本都不太復雜,而且腳本中注釋也比較細致,所以我就不過多解釋腳本內容了。

直接上圖上腳本:

shell版–使用截圖:

怎么用shell和Python查看Linux服務器的網卡流量 

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版–使用截圖:

怎么用shell和Python查看Linux服務器的網卡流量

怎么用shell和Python查看Linux服務器的網卡流量

怎么用shell和Python查看Linux服務器的網卡流量

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服務器的網卡流量這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女