• 监控linux流量shell版


    想要实时查看linux流量情况,又不想再去下第三方工具,可以直接写脚步运行!

    系统:centos 6.5

    原理:从/proc/net/dev中获取到流量情况,再通过换算并除以间隔时间来得到流量单位M

    #------------------
    #Author:Administrator
    #Created:2015-04-10
    #------------------
    #!/bin/bash
    
    #使用方法
    usage()
    {
      echo "useage: $0 ethname intervel"
      exit 0
    }
    
    #网口配置
    if [ $# -gt 1 ];then
      ethname=$1
      num=`ifconfig|grep ${ethname}|wc -l`
      if [ $num -gt 0 ];then
       ethname=$1
      else
        echo "Can't find $ethname,Please Check"
        exit 1
      fi
    fi
    
    #时间配置
    intervel=1
    if [ $# -gt 0 ]; then
      interval=$2
      test=`expr "$interval" * 0`
      if [ "$test" != "0" ]; then 
            echo "Invalid <interval> param '$interval' . It should be a integer number. Usage: $0 ethname intervel"
            exit -1  
      fi
      if [ $interval -lt 1 ]; then
            echo "Invalid <interval> param '$interval' . It should be > 0 (seconds). Usage: $0 ethname intervel"
            exit -1
      fi
    fi
    
    #函数判断
    if [ $# -ne 2 ]
    then
     usage
    fi
    
    echo "$0 is starting,Device is $1,Intervel is $2"
    echo -e "
    "
    
    typeset Rev old_Rev
    
    eth=$1
    intervel=$2
    
    old_Rev=`cat /proc/net/dev|grep $eth| awk '{print $1}'| awk -F : '{print $2}'`
    old_Send=`cat /proc/net/dev|grep $eth|awk '{print $9}'`
    #echo "old_Rev is $old_Rev"
    #echo "Old_send is $old_Send"
    
    while true
     do
     sleep $intervel
    
     Rev=`cat /proc/net/dev|grep $eth|awk '{print $1}'|awk -F : '{print $2}'`
     Send=`cat /proc/net/dev|grep $eth|awk '{print $9}'`
    #echo "Rev is $Rev"
    #echo "Send is $Send"
    
     diff_1=`awk -v Rev=$Rev -v old_Rev=$old_Rev -v intervel=$intervel 'BEGIN{printf "Receive is %6.2f", ( Rev - old_Rev ) / 1024 / 1024 / intervel * 8}'`
    
     diff_2=`awk -v Send=$Send -v old_Send=$old_Send -v intervel=$intervel 'BEGIN{printf "Send is %6.2f", ( Send - old_Send ) / 1024 / 1024 / intervel * 8}'` 
    
     echo "`date +'%Y-%m-%d %H:%M:%S'` Speed: IN ${diff_1} mbps OUT ${diff_2} mbps"
    
     old_Rev=$Rev
     old_Send=$Send
    done

     效果如下:

    [root@localhost tools]# ./bandwidth.sh eth0 1 
    ./bandwith.sh is starting,Device is eth0,Intervel is 1
    Ctrl+C To Stop!
    
    
    2015-11-13 16:49:34 Speed: IN Receive is   0.02 mbps OUT Send is   0.01 mbps
    2015-11-13 16:49:35 Speed: IN Receive is   0.01 mbps OUT Send is   0.00 mbps
    2015-11-13 16:49:36 Speed: IN Receive is   0.01 mbps OUT Send is   0.00 mbps

    在centos 7中,/proc/net/dev显示与centos 6有点差距,所以如果在centos 7中使用,需要将以下两个地方更改:

    old_Rev=`cat /proc/net/dev|grep $eth| awk '{print $2}'`
    old_Send=`cat /proc/net/dev|grep $eth|awk '{print $10}'`
    
    #---------------------------------------------------------------------
    
    Rev=`cat /proc/net/dev|grep $eth| awk '{print $2}'`
    Send=`cat /proc/net/dev|grep $eth|awk '{print $10}'`

    如使用有问题,请联系:

    362299908@qq.com

  • 相关阅读:
    生成实用包装码
    区分排序函数
    mysql优化
    高并发、大流量、大存储
    数据库的搬移
    linux查看系统日志及具体服务日志
    springboot拦截器实现
    使用ajax的get请求渲染html
    百度echarts折线图使用示例
    前端特殊符号转码
  • 原文地址:https://www.cnblogs.com/landhu/p/4961157.html
Copyright © 2020-2023  润新知