服务器 
首页 > 服务器 > 浏览文章

Linux服务器网卡流量查看方法 shell和Python各一枚

(编辑:jimmy 日期: 2024/11/26 浏览:3 次 )

有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用Python(后写的,一次可查看多个网卡)。

脚本中都用了while true“死循环”,每隔10s从“/proc/net/dev”中取一次值并根据10s内的差值计算10s内的平均带宽;按ctrl+c停止执行。脚本兼容centos6和7

两个脚本都不太复杂,而且脚本中注释也比较细致,所以我就不过多解释脚本内容了。

直接上图上脚本:

shell版–使用截图:

Linux服务器网卡流量查看方法 shell和Python各一枚 

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

Linux服务器网卡流量查看方法 shell和Python各一枚

Linux服务器网卡流量查看方法 shell和Python各一枚

Linux服务器网卡流量查看方法 shell和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-----") 

这俩脚本使用起来都还是很方便实用的,共享出来希望能给朋友们工作中带来一点方便。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:详解CentOS下VMware用桥接模式,静态ip上外网
下一篇:LNMP自动安装部署脚本
一句话新闻
一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 网站地图 SiteMap