查看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,如需转载请自行联系原作者



相关文章
|
4天前
|
监控 Unix Shell
shell脚本编程学习
shell脚本编程
22 12
|
8天前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
11天前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
27 2
|
1月前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
43 17
|
26天前
|
安全 Python
使用Python实现简单的Web服务器
使用Python实现简单的Web服务器
22 6
|
1月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
36 12
|
1月前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
36 8
|
1月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
2月前
|
运维 监控 数据库
自动化运维:使用Python脚本实现服务器监控
【8月更文挑战第31天】在这篇文章中,我们将探索如何利用Python编写简单的脚本来实现对服务器的基本监控。通过学习和应用这些技术,你可以快速检测服务器的状态,包括CPU使用率、内存占用和磁盘空间等关键指标。这不仅有助于及时发现问题,还能提升运维效率。文章将逐步引导你理解监控的重要性,并展示如何从零开始构建自己的监控工具。
|
2月前
|
Shell 网络安全 数据安全/隐私保护
使用 Python 远程登陆服务器的最佳实践
使用 Python 远程登陆服务器的最佳实践
下一篇
无影云桌面