有时我们需要较为实时的查看服务器上的网卡流量,这里我写了个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 |