<p>根本原因是未加-sudo、未用- nn/-k参数及未按关键词过滤;应先用lspci | grep -i "network|VGA|usb"定位设备,再用sudo lspci -nn -k -s [BDF]查厂商ID与驱动。</p>

直接用 lspci 能列出设备,但多数人查不到想要的型号、驱动或硬件 ID,根本原因不是命令输错了,而是没加对参数、没提权、也没过滤准。
怎么快速定位网卡/显卡/USB控制器这些关键设备
系统里常有二三十个 PCI 条目,全扫一遍效率低。按功能关键词过滤最省事:
-
lspci | grep -i "network\|ethernet"——网卡(含无线),但某些 Realtek 设备可能被识别为Mass storage controller,此时得配合-nn -
lspci | grep -E "(VGA|3D controller)"——显卡(注意部分核显显示为Display controller) -
lspci | grep -i "usb"——USB 主机控制器 -
lspci | grep -i "sata\|ahci\|nvme"——存储控制器
为什么 lspci | grep -i network 只显示 “Network controller” 却不带型号
因为默认输出只显示设备类别,不展开芯片型号。比如 Realtek RTL8168、Intel i219-V 这类真实型号,都藏在更深层字段里:
-
lspci -nn | grep -i network输出类似[10ec:8168],其中10ec是厂商 ID,8168是设备 ID,比文字描述更可靠,可直接查内核pci_ids或驱动源码 -
lspci -v -s 00:1f.6(把00:1f.6换成你查到的实际槽位)重点看Subsystem:行,那里通常有完整型号,如RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller - 不加
sudo时,Kernel driver in use:这类字段会为空或显示blank,根本没法判断驱动是否生效
查驱动是否加载、用的是哪个内核模块
只看设备名没用,关键得知道它有没有被系统认出来、绑了什么驱动。必须加 sudo,否则核心字段不可见:
-
sudo lspci -k -s 00:1f.6——重点看Kernel driver in use:(当前生效驱动,如e1000e、r8169)和Kernel modules:(系统识别但未加载的候选模块) - 若
Kernel driver in use:后面是空的,大概率驱动没加载,或设备异常;若显示pci-stub或vfio-pci,说明设备被隔离用于虚拟机直通 - 别依赖
lsmod | grep xxx反向查——有些驱动是内置进内核的(Built-in),lsmod根本不显示
查不到网卡?先确认是不是 USB 或虚拟网卡
lspci 只管 PCI/PCIe 总线上的设备,对 USB 网卡和虚拟机网卡完全无效:
- USB 网卡:
lsusb | grep -i network或lsusb -v | grep -A 5 -B 5 "Ethernet\|Network",输出里找bDeviceClass为02(CDC)或ff(vendor-specific)的设备 - 云服务器 / KVM 虚拟机:看到的
Red Hat, Inc Virtio network device或VMware PCnet32都是虚拟网卡,真实物理型号得去云控制台或宿主机上查 - 某些主板集成网卡(如 Intel I225-V)在 BIOS 中被禁用后,
lspci就完全不显示
真正容易被忽略的是权限和总线类型边界——lspci 不加 sudo 就看不到驱动绑定,而 USB/虚拟设备压根不在它的管辖范围里。查之前先想清楚:这设备物理上走的是哪条总线?有没有可能被 BIOS 关掉?


















