查看Linux服务器网卡流量小脚本shell和Python各一例

查看Linux服务器网卡流量小脚本shell和Python各一例,第1张

查看Linux服务器网卡流量小脚本shell和Python各一例

有时候要实时查询网络服务器上的网卡总流量。这里我写了两个小脚本,一个用shell(先写的,一次只能查询一个网卡),另一个用Python(后来写的,一次可以查询几个网卡)。而真正的“无限循环”在所有脚本中使用,每隔10s从“/proc/net/dev”中取值,根据10s内的误差计算10s内的平均网络带宽;按ctrl+c终止实现。脚本与centos6和7兼容

两个剧本都不算太复杂,剧本里的注释比较细腻,所以我要过多的表达剧本的内容。脚本立即出现在图中:

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 "ctrlc" 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 "%-三秒 %-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 "ctrlc" 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://outofmemory.cn/zz/778697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存