- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Linux服务器网卡流量查看方法 shell和Python各一枚由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用python(后写的,一次可查看多个网卡).
脚本中都用了while true“死循环”,每隔10s从“/proc/net/dev”中取一次值并根据10s内的差值计算10s内的平均带宽;按ctrl+c停止执行。脚本兼容centos6和7 。
两个脚本都不太复杂,而且脚本中注释也比较细致,所以我就不过多解释脚本内容了.
直接上图上脚本:
shell版–使用截图:
shell版代码:
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
26
|
#!/bin/sh
#by ljk 20160526
if
[
"$1"
=
""
];
then
#判断后面是否有跟参数
echo
-e
" use interface_name after the script,like "script eth0"... "
exit
-1
fi
echo
-e
" 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 "
in
: $speed_rx mb
/s
out: $speed_tx mb
/s
done
|
python版–使用截图:
python版代码:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#!/bin/env python3
#by ljk 20160526
import
os,re,sys,time
if
len
(sys.argv)
=
=
1
:
print
(
' 使用方法:请跟上网卡名称,可接"单个网卡"/"多个网卡,以空格分开". '
)
sys.exit(
100
)
else
:
print
(
'start monitoring,press "ctrl+c" to stop '
)
for
arg
in
sys.argv[
1
:]:
#输出标头
header
=
'------{} bandwidth(mb/s)------'
.
format
(arg)
print
(header.ljust(
35
),end
=
'')
print
()
#global values_dic
values_dic
=
{}
#定义空字典,用来在下面函数中存放各网卡的各项需要用到的值
def
get_values(orders):
try
:
with
open
(
'/proc/net/dev'
) as f:
lines
=
f.readlines()
#内容不多,一次性读取较方便
for
arg
in
sys.argv[
1
:]:
for
line
in
lines:
line
=
line.lstrip()
#去掉行首的空格,以便下面split
if
re.match(arg,line):
values
=
re.split(
"[ :]+"
,line)
#以空格和:作为分隔符
values_dic[arg
+
'r'
+
orders]
=
values[
1
]
#1为接收值
values_dic[arg
+
't'
+
orders]
=
values[
9
]
#9为发送值
#return [values[1],values[9]] #可返回列表
except
(fileexistserror,filenotfounderror,permissionerror):
print
(
'open file error'
)
sys.exit(
-
1
)
try
:
while
true:
get_values(
'first'
)
#第一次取值
time.sleep(
10
)
get_values(
'second'
)
#10s后第二次取值
for
arg
in
sys.argv[
1
:]:
r_bandwidth
=
(
int
(values_dic[arg
+
'r'
+
'second'
])
-
int
(values_dic[arg
+
'r'
+
'first'
]))
/
1024
/
1024
/
10
*
8
t_bandwidth
=
(
int
(values_dic[arg
+
't'
+
'second'
])
-
int
(values_dic[arg
+
't'
+
'first'
]))
/
1024
/
1024
/
10
*
8
print
(
'in: '
+
str
(
round
(r_bandwidth,
2
)).ljust(
8
)
+
' out: '
+
str
(
round
(t_bandwidth,
2
)).ljust(
16
),end
=
'')
print
()
values_dic
=
{}
#清空本次循环后字典的内容
except
keyboardinterrupt:
print
(
" -----bye-----"
)
|
这俩脚本使用起来都还是很方便实用的,共享出来希望能给朋友们工作中带来一点方便.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://blog.csdn.net/kai404/article/details/52853656 。
最后此篇关于Linux服务器网卡流量查看方法 shell和Python各一枚的文章就讲到这里了,如果你想了解更多关于Linux服务器网卡流量查看方法 shell和Python各一枚的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
Linux 管道可以缓冲多少数据?这是可配置的吗? 如果管道的两端在同一个进程中,但线程不同,这会有什么不同吗? 请注意:这个“同一个进程,两个线程”的问题是理论上的边栏,真正的问题是关于缓冲的。 最
我找到了here [最后一页] 一种有趣的通过 Linux 启动 Linux 的方法。不幸的是,它只是被提及,我在网上找不到任何有用的链接。那么有人听说过一种避免引导加载程序而使用 Linux 的方法
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我试图了解 ld-linux.so 如何在 Linux 上解析对版本化符号的引用。我有以下文件: 测试.c: void f(); int main() { f(); } a.c 和 b.c:
与 RetroPie 的工作原理类似,我可以使用 Linux 应用程序作为我的桌面环境吗?我实际上并不需要像实际桌面和安装应用程序这样的东西。我只需要一种干净简单的方法来在 RaspberryPi 上
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
有什么方法可以覆盖现有的源代码,我应该用 PyQt、PyGTK、Java 等从头开始构建吗? 最佳答案 如果您指的是软件本身而不是它所连接的存储库,那么自定义应用程序的方法就是 fork 项目。据我所
我的情况是:我在一个磁盘上安装了两个 linux。我将第一个安装在/dev/sda1 中,然后在/dev/sda2 中安装第二个然后我运行第一个系统,我写了一个脚本来在第一个系统运行时更新它。
我在 i2c-0 总线上使用地址为 0x3f 的系统监视器设备。该设备在设备树中配置有 pmbus 驱动程序。 问题是,加载 linux 内核时,这个“Sysmon”设备没有供电。因此,当我在总线 0
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正试图在 linux 模块中分配一大块内存,而 kalloc 做不到。 我知道唯一的方法是使用 alloc_bootmem(unsigned long size) 但我只能从 linux 内核而不是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有 .sh 文件来运行应用程序。在该文件中,我想动态设置服务器名称,而不是每次都配置。 我尝试了以下方法,它在 CentOS 中运行良好。 nohup /voip/java/jdk1.8.0_71/
我是在 Linux 上开发嵌入式 C++ 程序的新手。我有我的 Debian 操作系统,我在其中开发和编译了我的 C++ 项目(一个简单的控制台进程)。 我想将我的应用程序放到另一个 Debian 操
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我使用4.19.78版本的稳定内核,我想找到带有企鹅二进制数据的C数组。系统启动时显示。我需要在哪里搜索该内容? 我在 include/linux/linux_logo.h 文件中只找到了一些 Log
我知道可以使用 gdb 的服务器模式远程调试代码,我知道可以调试针对另一种架构交叉编译的代码,但是是否可以更进一步,从远程调试 Linux 应用程序OS X 使用 gdbserver? 最佳答案 当然
是否有任何可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的是在另一台机器上重建它,但假设我们唯一能得到的是一个二进制文件,那么这可能与否? (我知道这可能并不容易,但我只是
我是一名优秀的程序员,十分优秀!