在Linux系统中,监控网络流量是系统管理和故障排查的重要技能,通过命令行工具,管理员可以实时查看网络接口的流量统计、连接状态、数据包传输情况等信息,从而有效定位网络瓶颈、检测异常流量或优化网络配置,以下将详细介绍Linux中常用的网络流量查看命令,涵盖基础工具、高级分析工具及实际应用场景。

基础流量监控命令
ifconfig 和 ip 命令
ifconfig(传统工具)和ip(现代推荐工具)是查看网络接口基本信息的基础命令,通过ip -s link show或ifconfig -a,可以获取接口的接收(RX)和发送(TX)字节数、数据包数量、错误数等流量统计。
ip -s link show eth0
输出中RX和TX字段分别表示接收和发送的总字节数及数据包数,适合快速检查接口流量是否异常。
netstat 命令
netstat用于查看网络连接状态、路由表和接口统计,结合-i参数可显示所有接口的数据包统计:
netstat -i
输出包括接口名称、接收/发送的数据包、错误数、丢弃数等,适合排查接口层面的流量问题。

ss 命令
作为netstat的替代工具,ss提供更高效的网络连接统计,使用-s参数可汇总TCP、UDP等协议的连接数:
ss -s
通过-i参数还可显示接口统计信息,适合快速分析网络连接负载。
实时流量监控工具
iftop 命令
iftop以实时列表形式显示网络接口的流量情况,按带宽使用率排序,并显示源/目标IP的实时连接速度,安装后直接运行:
iftop -i eth0
支持交互操作,如按n显示主机名、按s按端口排序等,适合定位高流量进程或IP。

nethogs 命令
nethogs按进程显示网络带宽使用情况,可直接定位占用带宽的进程。
nethogs eth0
输出包括进程ID、名称、接收/发送速度,适合排查恶意程序或异常进程导致的流量激增。
vnstat 命令
vnstat通过后台服务持续记录网络流量,支持按天、月、年统计历史数据,首次使用需初始化数据库:
vnstat -u -i eth0
之后可通过vnstat查看实时流量,vnstat -d查看每日统计,适合长期流量趋势分析。
高级流量分析工具
tcpdump 命令
tcpdump是强大的网络抓包工具,可捕获并分析数据包内容,捕获eth0接口的所有HTTP流量:
tcpdump -i eth0 port 80 -w capture.pcap
结合Wireshark分析抓包文件,适合深度排查协议层问题或异常数据包。
iptraf 和 nload
iptraf:提供交互式界面,实时显示接口流量、TCP/UDP连接、网络状态等,运行iptraf后选择“Interface”即可监控指定接口。nload:以图形化方式显示输入/输出流量,直观展示带宽使用情况,运行nload eth0即可实时查看。
bmon 和 bwm-ng
bmon:基于文本的带宽监控工具,支持彩色流量条和实时统计。bwm-ng:可监控多个接口的带宽,支持自定义刷新间隔和输出格式。
脚本化与自动化监控
对于长期监控需求,可通过结合awk、grep等工具编写脚本,每5秒采集一次eth0的接收字节数并计算速率:
#!/bin/bash
prev=$(cat /sys/class/net/eth0/statistics/rx_bytes)
while true; do
sleep 5
curr=$(cat /sys/class/net/eth0/statistics/rx_bytes)
rate=$(( (curr - prev) / 1024 / 5 ))
echo "RX Rate: ${rate} KB/s"
prev=$curr
done
此类脚本可集成到监控系统中(如Zabbix、Prometheus),实现自动化告警。
工具对比与使用场景
以下表格总结了常用工具的特点及适用场景:
| 工具名 | 主要功能 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
ip/ifconfig |
查看接口统计信息 | 基础接口状态检查 | 系统内置,无需安装 | 功能单一,无实时流量 |
iftop |
实时流量排序及IP连接监控 | 定位高流量IP或连接 | 直观显示,支持交互 | 需安装,依赖libpcap |
nethogs |
按进程统计带宽 | 排查异常进程流量 | 精确到进程,资源占用低 | 不支持IPv6 |
vnstat |
历史流量统计 | 长期流量趋势分析 | 支持持久化存储,无需持续运行 | 实时性较差 |
tcpdump |
抓包及协议分析 | 深度网络故障排查 | 功能强大,可分析任意协议 | 需专业知识,输出复杂 |
相关问答FAQs
Q1: 如何查看某个进程占用的网络带宽?
A1: 可使用nethogs工具,命令为nethogs -p(显示进程ID)或nethogs(直接显示进程名),运行nethogs eth0后,按q退出,输出列表中“SENT”和“RECV”列分别表示该进程的发送和接收速度,若需更详细统计,可结合pidstat -t查看线程级网络使用情况。
Q2: 如何统计过去24小时内某个接口的总流量?
A2: 使用vnstat工具,首先确保已初始化数据库(vnstat -u -i eth0),然后运行vnstat -h查看每小时统计,或vnstat -d查看每日统计,若需精确到24小时内的总流量,可结合awk处理输出:vnstat -d | tail -n 1 | awk '{print $9" "$10}',其中第9、10列分别为总接收和发送流量(单位为KB/MB)。
