网络收发包计数记录在 /proc/net/dev 文件中, 要取得流量, 只需要读取里面的内容两次, 然后相减, 再除以时间间隔即可.

#!/bin/bash

#Usage1,record in file:    netmonitor <MinKB> <Interval> <FileName>
#Usage2,print on terminal: netmonitor <MinKB> <Interval>
#Record the value great than 100KB, 3 second Interval:
#Example1,record: netmonitor 100 3 xxx.txt
#Example2,print: netmonitor 100 3 #参数说明
#第一个是速度记录的下限,单位是KB,即超过多少KB才记录,0为全部记录
#第二个参数是采样间隔,即隔多少秒记录一次
#第三个参数是输出的文件名,为空的话就直接在终端打印 #xieqianli
#2011-4-25 #同时修改下列变量可以固定参数,使用脚本时就无需参数
MinKB="$1"
Interval="$2"
FileName="$3"
NetDev="wlan0" #检查参数完整性
if [ "$Interval" == "" ];then
echo "Usage1,record in file: netmonitor <MinKB> <Interval> <FileName>"
echo "Usage2,print on terminal: netmonitor <MinKB> <Interval>"
echo "Record the values great than 100KB, 3 seconds Interval:"
echo "Example1,record: netmonitor 100 3 xxx.txt"
echo "Example2,print: netmonitor 100 3"
exit 1
fi #检查 MinKB 参数的合法性
check=`echo $MinKB | grep "[^0-9]"`
if [ "$check" != "" ];then
echo "$MinKB is not a number"
exit 0
fi len=${#MinKB}
char1=`echo $MinKB | cut -c 1`
if [ $(($len)) -gt $((1)) -a "$char1"=="0" ];then
echo "$MinKB is not a number"
exit 0
fi #检查 Interval 参数的合法性
check=`echo $Interval | grep "[^0-9]"`
if [ "$check" != "" ];then
echo "$Interval is not a number"
exit 0
fi len=${#Interval}
char1=`echo $Interval | cut -c 1`
if [ $(($len)) -gt $((1)) -a "$char1"=="0" ];then
echo "$Interval is not a number"
exit 0
fi while [ 1 ]
do
#读取已接收和已发送字节数,间隔一秒
REC1=`cat /proc/net/dev | grep $NetDev | sed 's/:/ /' | tr -s " " | cut -d " " -f 3`
SEND1=`cat /proc/net/dev | grep $NetDev | sed 's/:/ /' | tr -s " " | cut -d " " -f 11`
sleep $Interval
REC2=`cat /proc/net/dev | grep $NetDev | sed 's/:/ /' | tr -s " " | cut -d " " -f 3`
SEND2=`cat /proc/net/dev | grep $NetDev | sed 's/:/ /' | tr -s " " | cut -d " " -f 11` if [ $((REC2)) -lt $((REC1)) ];then
exit 1
fi if [ $((SEND2)) -lt $((SEND1)) ];then
exit 1
fi RESULT_REC=$((($REC2-$REC1)/$Interval))
RESULT_SENT=$((($SEND2-$SEND1)/$Interval)) #进行B,KB和MB的单位换算
if [ $RESULT_REC -lt $((1024)) ]; then
SPEED_REC="$RESULT_REC B "
elif [ $RESULT_REC -gt $((1024)) -a $RESULT_REC -lt $((1048576)) ]; then
SPEED_REC="$(($RESULT_REC/1024)) KB"
elif [ $RESULT_REC -gt $((1048576)) ];then
SPEED_REC="$(($RESULT_REC/1048576)) MB"
fi if [ $RESULT_SENT -lt $((1024)) ]; then
SPEED_SENT="$RESULT_SENT B "
elif [ $RESULT_SENT -gt $((1024)) -a $RESULT_SENT -lt $((1048576)) ]; then
SPEED_SENT="$(($RESULT_SENT/1024)) KB"
elif [ $RESULT_SENT -gt $((1048576)) ];then
SPEED_SENT="$(($RESULT_SENT/1048576)) MB"
fi #求时间
TIME=`date` #左边填充空格,把结果进行右对齐
ZERO=$((8-${#SPEED_REC}))
for (( i=0; i<$ZERO; i=i+1 ))
do
SPEED_REC=" $SPEED_REC"
done ZERO=$((8-${#SPEED_SENT}))
for (( i=0; i<$ZERO; i=i+1 ))
do
SPEED_SENT=" $SPEED_SENT"
done REC_KB="$(($RESULT_REC/1024))"
SEND_KB="$(($RESULT_SENT/1024))" #过滤掉小于 MinKB 的记录
if [ "$MinKB" != "0" -a $((REC_KB)) -lt $MinKB -a $((SEND_KB)) -lt $MinKB ];then
continue
fi #输出结果
if [ "$FileName" = "" ];then
echo "$TIME Receive:$SPEED_REC Send:$SPEED_SENT"
else
echo "$TIME Receive:$SPEED_REC Send:$SPEED_SENT" >> $FileName
fi
done

网络流量监控shell脚本的更多相关文章

  1. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...

  2. Linux 性能监控之CPU&内存&I/O监控Shell脚本2

    Linux 性能监控之CPU&内存&I/O监控Shell脚本2   by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...

  3. Linux 性能监控之CPU&内存&I/O监控Shell脚本1

    Linux 性能监控之CPU&内存&I/O监控Shell脚本1   by:授客 QQ:1033553122   #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...

  4. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  5. Linux网络流量监控与分析工具Ntopng

    Ntopng工具 Ntopng是一个功能强大的流量监控.端口监控.服务监控管理系统 能够实现高效地监控多台服务器网络 Ntopng功能介绍 Ntop提供了命令行界面和web界面两种工作方式,通过web ...

  6. 搭建一个简单的基于web的网络流量监控可视化系统

    本文转载于我的个人博客,转载请标明出处. 初衷 在腾讯云的学生认证申请提交上去n天之后,终于得到了审批,所以迫不及待的想玩玩腾讯云,作为一个搞网络的,自然有一些关于网络应用的小玩意,所以把以前部署过的 ...

  7. 常用的主机监控Shell脚本

    最近时不时有朋友问我关于服务器监控方面的问题,问常用的服务器监控除了用开源软件,比如:cacti,nagios监控外是否可以自己写shell脚本呢?根据自己的需求写出的shell脚本更能满足需求,更能 ...

  8. linux 网络数据收发网络流量监控

    网卡流量 1.iftop命令 iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息.TCP/IP连接等官网:http://www.ex-parrot.com/~pdw/if ...

  9. Linux常用的系统监控shell脚本

    http://www.linuxqd.com下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助.1.查看主机网卡流量 #!/bin/bash #netw ...

随机推荐

  1. tuple解包给类的构造函数

    首先我们的第一步当然是将tuple解包.tuple提供了一个get函数来获取第N个元素.例如: get<1>(make_tuple(...)); 要将一个tuple全部拆解,就可以使用通过 ...

  2. jquery 2.0.3代码结构

    (function(){ (21 , 94) 定义了一些变量和函数 jQuery = function(){}; (96 , 283) 给JQ对象,添加一些方法和属性 (285 , 347) exte ...

  3. Axis2的下载和安装

    Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持S ...

  4. Centos下使用gitosis配置管理git服务端(转载)

    From:http://www.cnblogs.com/ahauzyy/archive/2013/04/08/3043384.html 说明:由于条件有限,我这里使用的是同一台centos的,但教程内 ...

  5. setcookie各个参数详解

    定义和用法 setcookie() 函数向客户端发送一个 HTTP cookie. cookie 是由服务器发送到浏览器的变量.cookie 通常是服务器嵌入到用户计算机中的小文本文件.每当计算机通过 ...

  6. ios统计代码行数

    要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 列出每个文件的行数: find . -name "*.m" -or -name "*.h" ...

  7. Number of Islands

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  8. 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService

    WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷.知名的XFile(新的如CXF).Axis1.Axis2等. 而Sun公司也不甘落后,从早期的JAX-R ...

  9. [ActionScript 3.0] AS3.0根据当天日期获取明天,后天...日期

    const dayTime:Number=24*3600*1000//一天毫秒数 var date:Date = new Date(); trace("今天:"+ date.toD ...

  10. spring错误<context:property-placeholder>:Could not resolve placeholder XXX in string value XXX

    spring同时集成redis和mongodb时遇到多个资源文件加载的问题 这两天平台中集成redis和mongodb遇到一个问题 单独集成redis和单独集成mongodb时都可以正常启动程序,但是 ...