有时我们需要较为实时的查看服务器上的网卡流量,这里我写了个shell小脚本。脚本中用了while true“死循环”,每隔10s从“/proc/net/dev”中取一次值并根据10s内的差值计算10s内的平均带宽;按ctrl+c停止执行。脚本兼容centos6和7,脚本不太复杂,而且脚本中注释也比较细致,所以我就不过多解释脚本内容了。
注:1kb=8字节,1Mb=1024kb
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
|
#!/bin/sh 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 |
本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1786936如需转载请自行联系原作者 weilovepan520 |