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

  有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用Python(后写的,一次可查看多个网卡)。脚本中都用了while true“死循环”,每隔10s从“/proc/net/dev”中取一次值并根据10s内的差值计算10s内的平均带宽;按ctrl+c停止执行。脚本兼容centos6和7

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

shell版--使用截图:

wKiom1dGtVjC0q0TAABf9C5ErSY496.png

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版--使用截图:
wKiom1dGuoqS6honAAA8gQMh4e8068.png


wKioL1dGu5HDfYfbAABaNXTdogo428.png


wKioL1dGu6DRv4BPAAEkqYfpne0398.png

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-----")

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

优秀的个人博客,低调大师

微信关注我们

原文链接:https://blog.51cto.com/kaifly/1783530

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。