在本教程中,我们将了解什么是 vnStat、如何安装以及如何在 Linux 和 BSD 操作系统中使用 vnStat 监控网络带宽。
vnstat介绍
VnStat 是一个免费的、开源的、轻量级的、基于控制台的网络流量监视器。 使用 VnStat,我们可以轻松找到消耗了多少网络带宽,并按小时、每天、每月或特定时间段显示结果。
Vnstat 收集单个或多个网络接口的使用详细信息,并在命令行中显示摘要。 它还有助于计算每月或每天或特定时间段的 Internet 带宽使用量。
在 Linux 上安装 vnStat
VnStat 在许多 Linux 和 Unix 操作系统的默认存储库中可用。 您可以使用您的发行版的包管理器安装它。
基于 Arch 的系统:
确保您已启用 [Community]
存储库并使用安装它 吃豆人 如下所示:
$ sudo pacman -S vnstat
在 Debian、Uubntu、Linux Mint、Pop OS 上:
$ sudo apt install vnstat
在 Ubuntu 上,您可能需要启用 [Universe]
用于安装 vnstat 的存储库。
在 Redhat、CentOS、AlmaLinux、Rocky Linux 上:
首先添加并启用 EPEL 存储库:
$ sudo dnf install epel-release
然后如上图安装 vnStat。
$ sudo dnf install vnstat
在 Fedora:
$ sudo dnf install vnstat
在 openSUSE 上:
$ sudo zypper install vnstat
安装 vnStat 后,使用命令启动其服务:
$ sudo systemctl enable --now vnstat
您不需要在基于 DEB 的系统上启动 vnstat,因为它会在安装期间自动启动。
在 FreeBSD 上安装 vnStat
在像 freeBSD 这样的 BSD 系统上,更新端口树并将 vnStat 安装为 root
用户使用命令:
# pkg update
# pkg install vnstat
安装后,启用并启动 vnStat 服务,如下所示。
# echo 'vnstat_enable="YES"' >> /etc/rc.conf
# service vnstat start
样本输出:
Starting vnstat. No interfaces found in database, adding available interfaces... Interface "em0" added with 1000 Mbit bandwidth limit. -> 1 new interface found. Limits can be modified using the configuration file. See "man vnstat.conf". Unwanted interfaces can be removed from monitoring with "vnstat --remove".".
在 Linux 上配置默认网络接口
vnStat 使用 eth0
作为其配置文件中的默认网络接口(/etc/vnstat.conf
)。
但是,在某些 Linux 系统(例如 Ubuntu)中,网络接口名称可能不同,例如 enp0s3
, enp0s8
. 您可以使用验证网络接口的名称 "ip addr"
命令。
让我们看一下 vnstat 配置文件的内容。
$ head /etc/vnstat.conf
样本输出:
# vnStat 1.18 config file ## # default interface Interface "eth0" # location of the database directory DatabaseDir "/var/lib/vnstat" # locale (LC_ALL) ("-" = use system locale)
可以看到,默认界面是 etho
在这个文件中。
让我们检查由 vnstat 标识的可用网络接口。
$ ls /var/lib/vnstat enp0s3 enp0s8
如您所见,可用的网络接口与 vnstat.conf 文件中定义的不同。
如果您没有设置正确的默认界面,则在每小时或每月查看网络带宽流量时可能会收到以下错误。
Error: Unable to read database "/var/lib/vnstat/eth0": No such file or directory
发生这种情况是因为,默认接口在 /etc/vnstat.conf
文件。
要配置默认网络接口,请编辑 /etc/vnstat.conf
文件并更新正确的接口名称。 可以直接编辑 /etc/vnstat.conf
文件并全局更新接口名称。 但是,建议在用户的 HOME 目录中创建自己的 vnstat 配置文件。
$ cp /etc/vnstat.conf ~/.vnstatrc
$ nano ~/.vnstatrc
我要使用 enp0s3
作为我的默认界面。
将 enp0s3 替换为您自己的。 Save 和 close 文件。
在 FreeBSD 上配置默认网络接口
编辑 vnstat 配置文件:
# vi /usr/local/etc/vnstat.conf
如果配置文件不可用,请使用示例配置文件创建一个新文件:
# cp /usr/local/etc/vnstat.conf.sample /usr/local/etc/vnstat.conf
然后,更新正确的默认网络接口:
Interface "em0"
Save 和 close 文件。
在 Linux 和 Unix 中使用 vnStat 监控网络带宽
如果您是 vnStat 的新手,请调出 vnStat 的帮助部分并通过运行以下命令查看可用选项列表:
$ vnstat --help
样本输出:
vnStat 1.18 by Teemu Toivola <tst at iki dot fi> -q, --query query database -h, --hours show hours -d, --days show days -m, --months show months -w, --weeks show weeks -t, --top10 show top 10 days -s, --short use short output -u, --update update database -i, --iface select interface (default: eth0) -?, --help short help -v, --version show version -tr, --traffic calculate traffic -ru, --rateunit swap configured rate unit -l, --live show transfer rate in real time See also "--longhelp" for complete options list and "man vnstat".
查看所有接口的带宽使用情况
现在,让我们显示所有接口的网络流量。
为此,只需运行:
$ vnstat
样本输出:
rx / tx / total / estimated enp0s3: Sep '19 120 KiB / 66 KiB / 186 KiB / 0 KiB today 120 KiB / 66 KiB / 186 KiB / -- enp0s8: Sep '19 128 KiB / 88 KiB / 216 KiB / 0 KiB today 128 KiB / 88 KiB / 216 KiB / --
这里,
rx
– 收到的流量tx
– 转移的流量
等待几分钟,让 Vnstat 开始收集网络流量使用情况。 如果您在安装后立即启动 vnstat,您可能会得到如下所示的结果。
enp0s3: Not enough data available yet.
或者,您将在基于 RPM 的发行版(例如 CentOS)中获得以下输出。
No database found, nothing to do. Use --help for help. A new database can be created with the following command: vnstat --create -i eth0 Replace 'eth0' with the interface that should be monitored. The following interfaces are currently available: enp0s3 (1000 Mbit) lo
它现在什么都不显示。 这是因为,vnStat 还没有开始收集统计信息。
查看特定接口的带宽使用情况
查看特定接口的网络带宽使用情况,例如 example enp0s3,只需提及如下所示的网卡名称。
$ vnstat -i enp0s3
样本输出:
Database updated: Mon Sep 9 08:26:47 2019 enp0s3 since 09/09/2019 rx: 136 KiB tx: 74 KiB total: 210 KiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- Sep '19 136 KiB | 74 KiB | 210 KiB | 0.00 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- today 136 KiB | 74 KiB | 210 KiB | 0.06 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- |

这里, enp0s3
是我的网卡名称。 您可以使用找到您的网卡名称 "ip addr"
命令。
在 自由BSD,网卡名称为 em0
. 要查看其带宽,只需运行:
# vnstat -i em0
样本输出:
Database updated: 2019-09-09 16:40:00 em0 since 2019-09-09 rx: 606.84 KiB tx: 56.12 KiB total: 662.96 KiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- 2019-09 606.84 KiB | 56.12 KiB | 662.96 KiB | 7 bit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- today 606.84 KiB | 56.12 KiB | 662.96 KiB | 90 bit/s ------------------------+-------------+-------------+--------------- estimated 873 KiB | 80 KiB | 953 KiB

查看每小时的带宽使用情况
让我们显示每小时的网络流量结果。 为此,请运行:
$ vnstat -h
样本输出:
enp0s3 09:46 ^ r | r r | r r | r r | r r r | rt rt r | rt rt r | rt rt rt | rt rt rt | r rt rt rt -+---------------------------------------------------------------------------> | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 h rx (KiB) tx (KiB) ][ h rx (KiB) tx (KiB) ][ h rx (KiB) tx (KiB) 10 0 0 ][ 18 0 0 ][ 02 0 0 11 0 0 ][ 19 0 0 ][ 03 0 0 12 0 0 ][ 20 0 0 ][ 04 0 0 13 0 0 ][ 21 0 0 ][ 05 0 0 14 0 0 ][ 22 0 0 ][ 06 12 7 15 0 0 ][ 23 0 0 ][ 07 86 48 16 0 0 ][ 00 0 0 ][ 08 88 45 17 0 0 ][ 01 0 0 ][ 09 59 32

如果您有多个接口,请使用 -一世 参数来查看特定卡的每小时网络流量,如下所示。
$ vnstat -h -i enp0s8
建议阅读:
- 如何使用 Wondershaper 在 Linux 中限制网络带宽
查看每日带宽使用情况
采用 '-d'
标志以显示每天默认网络接口的网络流量。
$ vnstat -d
样本输出:
enp0s3 / daily day rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- 09/09/2019 258 KiB | 138 KiB | 396 KiB | 0.09 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- |
查看每周带宽使用情况
$ vnstat -w
样本输出:
enp0s3 / weekly rx | tx | total | avg. rate ---------------------------+-------------+-------------+--------------- last 7 days 258 KiB | 138 KiB | 396 KiB | 0.00 kbit/s current week 258 KiB | 138 KiB | 396 KiB | 0.09 kbit/s ---------------------------+-------------+-------------+--------------- estimated -- | -- | -- |
查看每月带宽使用情况
要查看网络接口卡的每月使用情况,请使用 '-m'
转变。
$ vnstat -m
样本输出:
enp0s3 / monthly month rx | tx | total | avg. rate ------------------------+-------------+-------------+--------------- Sep '19 258 KiB | 138 KiB | 396 KiB | 0.00 kbit/s ------------------------+-------------+-------------+--------------- estimated -- | -- | -- |
显示过去十天的带宽使用情况
要显示过去十天的网络使用情况,请使用 '-t'
旗帜。
$ vnstat -t
样本输出:
enp0s3 / top 10 # day rx | tx | total | avg. rate -----------------------------+-------------+-------------+--------------- no data available -----------------------------+-------------+-------------+---------------
没有显示前十天的任何数据,因为我今天安装了Vnstat。
建议阅读:
- 在 Linux 上安装 NetData 性能监控工具
查看特定时间的带宽使用情况
我们还可以查看特定时间的带宽使用情况。
要显示过去十秒的带宽使用情况,请运行:
$ vnstat -i enp0s3 -tr 10
样本输出:
7 packets sampled in 10 seconds Traffic average for enp0s3 rx 0.28 kbit/s 0 packets/s tx 0.14 kbit/s 0 packets/s
查看实时带宽使用情况
要开始实时监控特定接口卡的使用情况,请运行:
$ vnstat -i enp0s3 -l
样本输出:
Monitoring enp0s3... (press CTRL-C to stop) rx: 0 kbit/s 0 p/s tx: 0 kbit/s 0 p/s

要停止实时监控,请按 CTRL-C
.
有关更多详细信息,请参阅手册页:
$ man vnstat
结论
VnStat 是一个方便且有用的工具,用于监控您的 Internet 使用情况或单个或多个网络接口的网络流量。 如果您想知道每天/每月消耗多少带宽,您可以使用此工具来查找,而无需 Internet 服务提供商的帮助或使用任何第三方工具。
资源: