真实链路速率以ethtool eth0输出的speed行为准:speed: 1000mb/s表示当前千兆,100mb/s为百兆,10mb/s为十兆;若无speed行或显示n/a,则link detected: no,链路未通。

ethtool eth0 输出的 Speed 行才是真实链路速率
别看 lspci 说“Gigabit Ethernet”就以为现在跑千兆——它只告诉你芯片设计支持千兆,不反映当前物理连接状态。真正决定你此刻带宽的是网卡和交换机/对端设备协商出来的实际速率,这个值只在 ethtool 的 Speed 行里体现。
-
Speed: 1000Mb/s→ 当前链路是千兆(1 Gbps) -
Speed: 100Mb/s→ 当前链路是百兆(100 Mbps) -
Speed: 10Mb/s→ 十兆,基本只剩兼容模式了 - 如果输出里没有
Speed行,或显示N/A,说明链路未通(Link detected: no),此时查速率没意义
cat /sys/class/net/eth0/speed 是最轻量的替代方案
不需要安装额外工具,只要内核 ≥ 2.6.29 且网卡已 link up,就能直接读取速率值:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
cat /sys/class/net/eth0/speed返回纯数字,单位 Mbps:输出1000就是千兆,100就是百兆 - 该文件只在链路建立后才有效;如果网线拔了、交换机端口 down 或驱动未加载,会报
No such device或返回N/A - 注意:某些老旧网卡(如部分 Realtek RTL8139)或虚拟网卡(
veth,docker0)不支持此接口,读取会失败
mii-tool 和 ifconfig 都不可靠,慎用
mii-tool 在千兆场景下基本失效——它压根不识别 1000baseT,输出里只有 100baseTx-FD 或 10baseT-HD,根本看不到千兆协商结果。而 ifconfig 的输出里根本就没有 Speed 字段,所谓“Bit Rate”是无线网卡专有字段,有线以太网永远为空。
-
mii-tool eth0显示negotiated 100baseTx-FD≠ 一定是百兆,可能是千兆卡降速协商的结果,但工具不显示 -
ifconfig eth0输出中找不到任何速率信息,依赖它判断只会误判 - 这两个命令在现代发行版中已被标记为 deprecated,
ethtool是唯一被内核持续维护的权威接口
watch -n 1 'ethtool eth0 | grep Speed' 适合排查速率跳变
如果你怀疑网卡速率不稳定(比如从 1000Mb/s 突然掉到 100Mb/s),用 watch 实时盯住 Speed 最直接:
-
watch -n 1 'ethtool eth0 | grep Speed'每秒刷新一次,一眼看出是否抖动 - 配合
ethtool eth0 | grep "Link detected\|Auto-negotiation"一起看,能快速区分是物理层断连(Link detected: no)还是协商异常(Auto-negotiation: off且手动设速不匹配) - 注意:频繁执行
ethtool对 CPU 几乎无压力,但不要用watch -n 0.1,某些低端 PHY 芯片可能响应不过来
ethtool 的 Speed 行为准,其他路径要么是硬件能力、要么是历史残留、要么干脆不存在。最容易被忽略的是:网卡名称不是固定的 eth0,得先用 ip -br a 或 ls /sys/class/net/ 确认哪个接口实际 link up 且带 IP,再查它。










