ethtool -i 是唯一能一步确认当前网卡实际加载驱动名称的命令,直接输出 driver 字段(如 e1000e、r8169),而非芯片型号;需指定物理接口名(如 ens33),且不可省略 -i 参数,其他命令如 ethtool 或 --driver 均无效。

ethtool -i 是唯一能一步确认当前网卡实际加载驱动名称的命令,其他方式要么间接、要么不可靠。
用 ethtool -i 查真实驱动名
它直接读取内核为该接口绑定的驱动模块,输出里 driver 字段就是答案。常见错误是只输 ethtool ens33 或 ethtool --driver ens33——这两个都不生效,前者只显示链路状态,后者参数被忽略。
- 先确认物理网卡名:
ip -br a或ls /sys/class/net/,排除lo、veth*、docker0等非物理接口 - 典型物理名有:
ens33、eno1、enp0s3、eth0(老系统) - 执行:
ethtool -i ens33,重点看driver字段值,比如e1000e、r8169、vmxnet3 -
driver是内核模块名,不是芯片型号:Realtek RTL8111 通常由r8169驱动,但有问题时换r8168后,driver字段会立刻变成r8168
为什么 lspci 和 lsmod 不够用
lspci | grep -i ethernet 只能告诉你硬件型号和 PCI 地址,无法确认哪个驱动正在服务这个接口;lsmod | grep network 会列出所有已加载的网络模块,但你不知道哪个绑定了当前网卡。
-
lspci -k虽然带Kernel driver in use:,但输出冗长、需人工匹配设备与接口名,且对 USB 网卡或某些虚拟化场景不适用 - 如果
lspci -k显示Kernel driver in use: r8169,但ethtool -i ens33显示driver: e1000e,说明接口名对应关系出错,可能绑定了错误设备 -
modinfo r8169可查模块版本,但无法反映该模块是否真正在运行——ethtool -i的version字段才是真实生效的编译版本
用 /sys/class/net/ 下的驱动链接验证
这是最底层的验证方式,比命令更接近内核视角,适合排查驱动未加载或绑定异常的情况。
- 执行:
ls -l /sys/class/net/enp0s3/device/driver(把enp0s3换成你的接口名) - 正常输出类似:
driver -> ../../../bus/pci/drivers/<code>e1000e,末尾就是驱动名 - 如果报错
No such file or directory,大概率是虚拟网卡(如vmxnet3)、USB 网卡,或驱动根本没加载成功
驱动名差异直接影响功能和问题定位
同一个硬件可能由不同驱动接管,行为差异极大,不能只看芯片型号。
-
driver: forcedeth且dmesg | grep forcedeth有ignoring PHY interrupt→ 驱动已放弃物理层管理,后续ethtool -s speed强设大概率失败 -
driver: i40e(Intel X710)→ 支持完整诊断:ethtool -t、-e都可用 -
driver: vmxnet3(VMware 虚拟网卡)→ 不走 PHY 协商,ethtool -s speed直接报错 -
bus-info: 0000:02:00.0且driver: ixgbe→ 基本可断定是万兆独立网卡
driver 字段是否和当前运行状态一致——它决定了你能调什么参数、遇到什么错误、甚至要不要重装驱动。











