网络流量监控shell脚本
网络收发包计数记录在 /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脚本的更多相关文章
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- Linux 性能监控之CPU&内存&I/O监控Shell脚本2
Linux 性能监控之CPU&内存&I/O监控Shell脚本2 by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...
- Linux 性能监控之CPU&内存&I/O监控Shell脚本1
Linux 性能监控之CPU&内存&I/O监控Shell脚本1 by:授客 QQ:1033553122 #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...
- shell脚本实现监控shell脚本的执行流程及变量的值
这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...
- Linux网络流量监控与分析工具Ntopng
Ntopng工具 Ntopng是一个功能强大的流量监控.端口监控.服务监控管理系统 能够实现高效地监控多台服务器网络 Ntopng功能介绍 Ntop提供了命令行界面和web界面两种工作方式,通过web ...
- 搭建一个简单的基于web的网络流量监控可视化系统
本文转载于我的个人博客,转载请标明出处. 初衷 在腾讯云的学生认证申请提交上去n天之后,终于得到了审批,所以迫不及待的想玩玩腾讯云,作为一个搞网络的,自然有一些关于网络应用的小玩意,所以把以前部署过的 ...
- 常用的主机监控Shell脚本
最近时不时有朋友问我关于服务器监控方面的问题,问常用的服务器监控除了用开源软件,比如:cacti,nagios监控外是否可以自己写shell脚本呢?根据自己的需求写出的shell脚本更能满足需求,更能 ...
- linux 网络数据收发网络流量监控
网卡流量 1.iftop命令 iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息.TCP/IP连接等官网:http://www.ex-parrot.com/~pdw/if ...
- Linux常用的系统监控shell脚本
http://www.linuxqd.com下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助.1.查看主机网卡流量 #!/bin/bash #netw ...
随机推荐
- YCbCr;YUV;RGB
1. 来源的差异 yuv色彩模 型来源于rgb模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域. 应用:basic color model used in analogue color ...
- MSSQL死锁产生原因及解决方法
一. 什么是死锁 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进 ...
- UIView阴影和圆角的关系
UIView阴影和圆角的关系 UIView 的 clipsToBounds属性和CALayer的setMasksToBounds属性表达的意思是一致的. 取值:BOOL(YES/NO) 作用:决定 ...
- Tesseract-OCR 字符识别---样本训练
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文). ...
- 九度OJ1008
这道题其实就是一个简单的Dijkstra变形,只是要考虑重边的情况. 当在更新图中点到起点的距离时,将花费p也计算在内:如果长度与之前计算的值相等,则再考虑此时花费p是否会更少,是的话则仍然要更新最短 ...
- java整数类型
1.整数类型:byte占8位,short 占16位,int占32位,long占64位. 2.对于long类型的值,若赋值给的值大于int类型的最大值或小于int型的最小值,则需要在数字后加L或l,表示 ...
- 动态代理实现AOP【转】
http://blog.csdn.net/beijiguangyong/article/details/8624016 根据前面介绍的Proxy和InvocationHandler,实在很难看出这种动 ...
- 用ie调试的时候显示:脚本调试程序无法连接到目标进程,已附加调试程序。
解决方案如图所示: 解决方案: 在internet的选项工具中选中高级然后去掉禁止脚本调试的情况:
- Android:使用adb命令行导出[数据库db3]文件
cmd->cd到:D:\tools\adt-bundle-windows-x86_64-20140321\adt-bundle-windows-x86_64-20140321\sdk\platf ...
- 简洁之美 -约瑟夫环的python 解法
问题描述: 约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下 ...