/proc/net/dev 是 Linux 系统中一个重要的虚拟文件,用于实时显示网络接口的详细统计信息。它包含了每个网络接口的接收(RX)和发送(TX)数据包的详细指标,常用于监控网络流量、诊断网络问题或编写网络监控脚本。
内容结构
文件内容分为两列:
- 左列(Receive):接收数据的统计(从网络接口接收到的数据)。
- 右列(Transmit):发送数据的统计(通过网络接口发送出去的数据)。
每个网络接口的信息占一行,格式如下:
1 | Interface | RX_Bytes RX_Packets RX_Errors RX_Drop RX_FIFO RX_Frame RX_Compressed RX_Multicast | TX_Bytes TX_Packets TX_Errors TX_Drop TX_FIFO TX_Colls TX_Carrier TX_Compressed |
字段说明
接收(RX)统计
字段名 | 描述 |
---|---|
bytes |
接收的总字节数(包括数据链路层头部,如以太网帧)。 |
packets |
接收的总数据包数。 |
errs |
接收时发生的错误(如 CRC 校验失败、帧对齐错误等)。 |
drop |
因内核缓冲区不足等原因被丢弃的数据包数。 |
fifo |
因 FIFO(先进先出)缓冲区溢出导致的丢包数。 |
frame |
接收到的帧对齐错误(如长度不符合标准)的数据包数。 |
compressed |
接收的压缩数据包数(通常为 0,除非使用特定协议)。 |
multicast |
接收到的组播(Multicast)数据包数。 |
发送(TX)统计
字段名 | 描述 |
---|---|
bytes |
发送的总字节数(包括数据链路层头部)。 |
packets |
发送的总数据包数。 |
errs |
发送时发生的错误(如 DMA 传输失败、物理层错误等)。 |
drop |
因内核缓冲区不足等原因被丢弃的数据包数。 |
fifo |
因 FIFO 缓冲区溢出导致的丢包数。 |
colls |
发送时发生的冲突(Collisions)次数(常见于以太网半双工模式)。 |
carrier |
因载波信号丢失导致的发送失败次数(如网线断开)。 |
compressed |
发送的压缩数据包数(通常为 0)。 |
完整示例数据
1 | cat /proc/net/dev |
常见用途
实时监控网络流量:
1
watch -n 1 "cat /proc/net/dev"
每 1 秒刷新一次网络接口统计信息。
诊断网络问题:
- 如果
errs
或drop
数值显著增加,可能表明网络硬件故障或配置问题。 colls
增加可能表明网络中存在冲突(如半双工模式不匹配)。
- 如果
脚本化监控:
使用awk
或grep
提取特定接口的流量:1
awk '/eth0/ {print "RX Bytes: " $2, "TX Bytes: " $10}' /proc/net/dev
注意事项
- 权限:普通用户可读取
/proc/net/dev
,但需注意权限设置。 - 动态更新:文件内容由内核动态生成,每次读取均为当前瞬时状态。
- 字段差异:不同内核版本可能增减字段,建议通过
man proc
确认具体字段含义。
替代工具
ifconfig
或ip -s link
:提供类似的统计信息。nload
、iftop
:图形化实时流量监控工具。sar -n DEV
:通过sysstat
包获取历史网络统计。