linux下监控网卡流量的shell脚本(实例分享)(图文)

发布时间:2020-10-02编辑:脚本学堂
本文介绍下,在linux下监控网卡流量的一个shell脚本,通过读取/proc/net/dev/中的数据,对网卡流量加以分析。有需要的朋友参考下。

在linux中,可以使用命令 cat /proc/net/dev 获取网卡的当前信息。
该命令详细列出当前网卡流入流出的字节总数,要监控网络的流量。

我们要做的,就是按一定的时间间隔去读取流量信息,然后进行四则运算,得出想要的结果即可。

代码如下:

复制代码 代码示例:

#!/bin/bash
#edit by www.jb200.com
usage() {
  echo "Useage : $0"
  echo "eg. sh $0 eth0 2"
  exit 1
}

if [ $# -lt 2 ]
then
   usage
fi

eth=$1
timer=$2

in_old=$(cat /proc/net/dev | grep $eth | sed -e "s/(.*):(.*)/2/g" | awk '{print $1 }')
out_old=$(cat /proc/net/dev | grep $eth | sed -e "s/(.*):(.*)/2/g" | awk '{print $9 }')

while true
do
   sleep ${timer}
   in=$(cat /proc/net/dev | grep $eth | sed -e "s/(.*):(.*)/2/g" | awk '{print $1 }')
   out=$(cat /proc/net/dev | grep $eth | sed -e "s/(.*):(.*)/2/g" | awk '{print $9 }')
   dif_in=$(((in-in_old)/timer))
   dif_in=$((dif_in/1024))
   dif_out=$(((out-out_old)/timer))
   dif_out=$((dif_out/1024))
   ct=$(date +"%F %H:%M:%S")
   echo "${ct} -- IN: ${dif_in} KByte/s     OUT: ${dif_out} KByte/s"
   in_old=${in}
   out_old=${out}
done
exit 0

代码说明:
1,此代码接收两个参数,参数1为要监测的网卡接口,比如eth0;参数2为监测的间隔时间,比如可以设为2秒监测一次。
2,此脚本使用了sed、awk命令,不了解的朋友,建议好好掌握下,这二个命令在linux中那是相当值得深究的。

下面是该脚本在笔者电脑上的运行结果,自用的内网机器没啥流量,作个参考演示吧。
如下图:
 

监测网卡流量

有关/proc/net/dev/中参数的说明,参考如下:

root@jbxue > cat /proc/net/dev
Inter-    | Receive                   |  Transmit
 face     | bytes    packets  errs  drop   fifo   frame   compressed  multicast  |  bytes    packets   errs    drop    fifo    colls    carrier   
 compressed
  eth0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  eth1:   67437819880 552776948    0    0    0     0          0         6 63179118041 486899714    0    0    0     0       0          0
    lo:      2338316682 34154992    0    0    0     0          0         0 2338316682 34154992    0    0    0     0       0          0
 tunl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
  sit0:        0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
ip6tnl0:    0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

参数说明:
1,最左边的表示接口的名字,Receive表示收包,Transmit表示收包;
2,bytes表示收发的字节数;
3,packets表示收发正确的包量;
4,errs表示收发错误的包量;
5,drop表示收发丢弃的包量;

您可能感兴趣的文章:
一个测试网卡流量的shell脚本
统计网卡流量的二个shell脚本(ifconfig)(图文)
实时查看Linux网卡流量的shell脚本分享(图文)
检测网卡流量的shell脚本
监控网卡流量的shell脚本分享
ifconfig统计网卡流量的shell脚本
使用awk统计网卡最大流量及单位换算的问题
使用shell监控网络的实时流量