网络编程
位置:首页>> 网络编程>> Python编程>> Linux服务器网卡流量查看方法 shell和Python各一枚

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

作者:kaifly  发布时间:2023-10-07 09:31:19 

标签:Linux,网卡流量,shell,python

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

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

来源:http://blog.csdn.net/kai404/article/details/52853656

0
投稿

猜你喜欢

  • MySQL使用环境变量TMPDIR的值作为保存临时文件的目录的路径名。如果未设置TMPDIR,MySQL将使用系统的默认值,通常为/tmp、
  • 一般事件事件浏览器支持描述onClickHTML: 2 | 3 | 3.2 | 
  • 我是从去年初开始学习web标准的,两年下来也有些心得。最近跳槽了正好闲在家里,写一些出来和大家交流一下。1对于web标准和W3C XHTML
  • 在腾讯的微信公众平台开发者文档,网页授权获取用户基本信息这一节中写道”在微信公众号请求用户网页授权之前,开发者需要先到公众平台网站的我的服务
  • 在开始聊我在阿里四个月的网页推广设计之前,我想先来说说我对平面设计和网页设计的认识。它们之间的交集。1.它们都是集艺术创作、电脑技术和数字技
  • 内容适应形式学习了死猫的文章,我今天也来说说有关内容和容器的关系。看标题你也许觉得有些囧,它和上一篇《形式追随内容?》看起来相反,而且好像从
  • 前言值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值
  • 今天发现了一个显示ORACLE语法的好网站。内容太多,就不一一摘录了,记在这里,也方便自己查找。http://ss64.com/ora/ 目
  • Asp开发 联通CDMA以下是在开发wap中的随笔,其中一些对于“老鸟”来说,谈不上什么,希望对初学者有所帮助,大家有什么小技巧,欢迎顶上来
  • 在Linux下C连接MySQL出现问题如下:编译成功后,运行程序,出现./connect: error while loading shar
  • 假如不使用INSTEAD OF触发器或可更新分区视图而是通过视图来修改数据,那么再修改之前,请考虑下列准则:◆如果在视图定义中使用了 WIT
  • 对于数据库管理员来说,可以经常想了解一些之前未听说过的存储过程,特别是无文档类型的存储过程。或许是用这些存储过程,能够简化日常的数据管理。为
  • 一.Orcal临时表分类1.会话级临时表1).保存一个会话Session的数据。2).当会话退出时,临时表数据自动清空。表结构与元数据还存储
  • 很多时候,我们都需要获取windows消息提示框的文本内容,例如系统异常信息,软件错误提示等。。。但是如何获取提示信息呢?通常我们的印象中,
  • 在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高
  • 网上给出了各种方法,都无碍乎先切换到Python脚本所在目录,然后输入Python脚本名称并回车,本文这里给出了更简便的方法。方法一:进入P
  • 你不得不承认,今天网络发展之迅速,信息流动速度之快、量之大,是我们不曾考虑过的,但现在它就真真切切地摆在我们面前。如何接纳信息,怎么处理、消
  • 原因:list 获得的数据为空: 显示值为 [ ]不同的判断--- is None----not两者结果不一样分析:总之:not 判断的是内
  • 前段时间在开发雨哲树网程序的时候,遇到需要转换地址中的参数,需要用到简单可逆运算的加密功能。在网上找了很多都不理想。因为我需要的这个可逆运算
  • 我想大多数的人在编写ASP程序的时候,都碰到过类似的错误信息: Error Number -> 
手机版 网络编程 asp之家 www.aspxhome.com