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

有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用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-----")

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

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

(0)

相关推荐

  • linux系统单网卡绑定双IP的具体操作方法

    1. 进入目录:cd /etc/sysconfig/network-scripts/ 2. 使用vi命令编辑ifcfg-eth0,如下:# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]DEVICE=eth0BOOTPROTO=staticBROADCAST=192.168.0.255HWADDR=00:0C:29:25:96:A3#第1个IPIPADDR=192.168.0.2NETMASK=255.255.255.0NETWORK=19

  • 详解Linux查看实时网卡流量的几种方式

    在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众多统计数据.其在不同的系统上命令有些差异,某些系统提供的sar支持基于网络接口的数据统计,也可以查看设备上每秒收发包的个数和流量. sar –n DEV 1 2 命令后面1 2 意思是:每一秒钟取1次值,取2次. DEV显示网络接口信息 另外,-n参数很有用,他有6个不同的开关:DEV | EDEV

  • php获取网卡的MAC地址支持WIN/LINUX系统

    复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; function GetMacAddr($os_type){ switch ( strtolower($os_type) ){ case "linux": $this->for

  • linux 网卡配置详解及实例

    linux网卡配置 DEVICE=物理设备名 IPADDR=IP地址 NETMASK=掩码值 NETWORK=网络地址 BROADCAST=广播地址 GATEWAY=网关地址 TYPE=Ethernet (网络类型) ONBOOT=[yes|no](引导时是否激活设备) USERCTL=[yes|no](非root用户是否可以控制该设备) PEERDNS=[yes|no] (如果通过 DHCP 获取 IP ,是否将 DNS 信息写入 /etc/resolv.conf (覆盖)) BOOTPROT

  • Linux系统下双网卡配置实践总结

    前提: 1.不要在虚拟机上配置.不论是vm5还是vm6,本人试过多次,每次都是貌似成功,但用机器ping做断网试验时就会发现真相: 2.必须用同品牌同型号网卡.两块不一样的网卡,按照文档配置完毕后,即使从本机ping外部地址,也会发现网络似乎完全断了: 3.慎用service network restart.配置完毕,试验成功后,避免在双网卡机器上执行网络重启的操作,否则你会发现网络不通了,即使你手工再次执行ifenslave eth0 eth1也只能激活一块网卡. 下面说一下配置: 1.网卡配

  • linux 双网卡绑定网络设置方法

    设置linux主机的主机名和域名 /etc/hosts 例子 127.0.0.1 localhost.localdomain localhost 一般情况下hosts的内容关于主机名(hostname)的定义,每行为一个主机,每行由三部份组成,每个部份由空格隔开.其中#号开头的行做说明,不被系统解释. 第一部份:网络IP地址: 第二部份:主机名.域名,注意主机名和域名之间有个半角的点,比如 localhost.localdomain 第二部份:主机名(主机名别名) ,其实就是主机名: 当然每行也

  • Linux系统网卡设置教程

    由于做了虚拟机的克隆,发现克隆机和被克隆机的MAC地址相同了,下面我将要介绍一下linux中网卡的配置步骤,我使用的linux是CentOS release 6.9 (Final) 1.root用户编辑/etc/udev/rules.d/70-persistent-net.rules文件,找到mac地址重复的那个网卡并删除(这里是eth0),记住新生成的网卡eth1的mac地址,后面会用到,保存并退出 # vi /etc/udev/rules.d/70-persistent-net.rules

  • 自动生成linux网卡配置脚本分享

    补充:这是对于第一次添加的网卡有效,如果需要重复添加和删除后自动配置,需要更改脚本,改为根据ip a命令的信息来修改. 复制代码 代码如下: #!/bin/bash#update:2013-02-25#author:ihuotui#version 0.1 cdate=$(date '+%Y%m%d')num=$(ifconfig -a | grep eth | wc -l)echo "ethX=" $num >> ethX for ((n=1;n<${num};n++

  • Linux学习之CentOS(二十九)--Linux网卡高级命令、IP别名及多网卡绑定的方法

    本篇随笔将详细讲解Linux系统的网卡高级命令.IP别名以及Linux下多网卡绑定的知识 一.网卡高级命令 在之前的一篇随笔里Linux学习之CentOS(九)--Linux系统的网络环境配置,详细讲解了Linux系统下的网络环境配置等知识,我们了解了一些关于网络配置的一些基本命令.在这里将补充一些Linux系统下有关网卡的一些高级命令. ①mii-tool 命令 mii-tool命令我们可以用来查看网卡状态信息,包括了以太网连接是否正常,使用的是哪种型号的网卡等等 [root@xiaoluo

  • ubuntu (linux)修改网卡名称命令

    linux 修改网卡 网卡名称eno16777736改为eth0 1.vim /etc/sysconfig/grub 然后,往这个文件中添加"net.ifnames=0 biosdevname=0"内容,如下图所示: 上图中,红框部分是我所添加的内容(注意它的位置). 紧接着,执行如下命令: view sourceprint? 1.grub2-mkconfig -o /boot/grub2/grub.cfg 效果如下: 然后,重启系统后查看网卡名称: 感谢阅读,希望能帮助到大家,谢谢大

随机推荐