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

简介:

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

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

shell版--使用截图:

wKiom1dGtVjC0q0TAABf9C5ErSY496.png

shell版代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/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版代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/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-----" )

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




     本文转自kai404 51CTO博客,原文链接:http://blog.51cto.com/kaifly/1783530,如需转载请自行联系原作者



相关文章
|
11天前
|
存储 Shell Linux
Linux Bash 脚本中的 IFS 是什么?
【4月更文挑战第25天】
32 0
Linux Bash 脚本中的 IFS 是什么?
|
5天前
|
网络协议 数据格式 Python
Python进阶---HTTP协议和Web服务器
Python进阶---HTTP协议和Web服务器
18 4
|
6天前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
59 0
|
6天前
|
运维 Linux 程序员
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
最全查看Linux系统状态脚本_linux查询所有服务器信息的脚本,墙都不扶就服你
|
9天前
|
SQL 存储 数据库
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息
|
9天前
|
SQL 存储 数据库
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息(1)
两个Python脚本轻松解决ETL工作:统计多个服务器下所有数据表信息(1)
|
9天前
|
Web App开发 Ubuntu Linux
Linux无图形界面环境使用Python+Selenium实践
【5月更文挑战第1天】Linux无图形界面环境使用Python+Selenium实践
56 2
|
11天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
19 6
|
11天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
31 5
|
11天前
|
分布式计算 大数据 Hadoop
【经验分享】用Linux脚本管理虚拟机下的大数据服务
【经验分享】用Linux脚本管理虚拟机下的大数据服务
20 1