ip -s link show 输出链路层累计统计,包括rx/tx的packets、bytes、errors、dropped等总和,非实时速率,单位默认字节,加-h自动换算,需指定dev避免刷屏。

ip -s link show 输出的是什么
它输出的是链路层(OSI 第二层)的累计统计,不是实时速率,也不是 IP 层数据。字段如 packets、bytes、errors、dropped 都是从接口启用或上次清零起的总和,重启网络服务或系统后归零。
重点看两块:RX 下的 packets 和 errors,反映入向是否稳定;TX 下的 dropped(内核发送队列满导致丢弃)和 carrier(物理链路反复断连,比如网线松动)。
-
bytes值单位在加-h后自动转为 KiB/MiB,但注意它只计到协议栈入口,不含 TCP 重传或应用层吞吐 - 不加
-h时全是字节,数字巨大难读,旧系统(如 CentOS 6)尤其明显 - 不指定
dev eth0就会刷屏所有接口(包括lo),建议始终显式指定
/proc/net/dev 是最轻量的原始统计源
这是内核直接暴露的伪文件,无依赖、可脚本化,字段含义与 ip -s link 高度一致,但格式固定、更易解析。
关键字段: rx_bytes、tx_bytes、rx_packets、tx_packets、rx_errors、tx_errors、rx_dropped、tx_dropped。
- 适合写监控脚本:两次读取差值 ÷ 时间间隔 = 平均速率(单位是 Byte/s,除以 125 得 Mbps)
- 字段顺序固定,第 2 列是
rx_bytes,第 10 列是tx_bytes,可用awk '{print $2,$10}'提取 - 不能直接看出“现在跑多少 Mbps”,必须手动算差值;
watch -n 1 'cat /proc/net/dev | grep eth0'只能帮你盯住变化
为什么 ip -s link 不显示 IP 地址或网卡型号
因为 link 操作对象是数据链路层,只管 MAC、MTU、UP/DOWN 状态和帧级计数。IP 地址属于网络层,得用 ip addr;网卡型号是硬件信息,得查 lspci | grep -i ethernet 或 ethtool -i eth0。
- 常见误操作:把
ip -s link当成ifconfig替代品,结果找不到inet字段 - 想确认物理状态(Link detected、Speed、Duplex),必须用
ethtool eth0,不是ip -s link - 容器或虚拟机里看到高
TX dropped,大概率是宿主机网桥队列溢出,不是容器内程序问题
排查时怎么避免只看数字不看趋势
单次输出的绝对值意义有限,真正有用的是变化量和异常增长模式。
- 先记下初始值:
ip -s -h link show dev eth0,10 秒后再跑一次,对比RX packets是否增长——不增说明链路中断或上层没发包 - 发现
RX errors上升,别急着重启网卡,先运行ethtool eth0看Link detected: yes和Speed:是否正常 - 如果
carrier非零且持续跳变,基本锁定物理层问题:网线、RJ45 接口、交换机端口
统计类命令本身不解决故障,只告诉你“哪里可能坏了”;下一步该用什么命令查,得看具体字段异常在哪一层。











