什么 lspci 命令行开关将输出限制为仅“以太网”设备?

什么 lspci 命令行开关将输出限制为仅“以太网”设备?

尝试查看是否可以限制lspci命令的输出以仅显示以太网设备。该-d开关似乎应该可以工作,但我尝试过的任何方法都无法完成工作。例如:

lspci -d '*:*:02'

仍然显示全部pci 设备类。我02根据此处找到的值用作类:http://pci-ids.ucw.cz/read/PD/02

作为参考,这里是交换机的“man lspci”信息-d

-d [<供应商>]:[<设备>][:<类>] 仅显示具有指定供应商、设备和类别 ID 的设备。 ID 以十六进制给出,可以省略或给出为“*”,两者均表示“任何值”。

我目前正在使用 grep 来过滤输出,这样就完成了工作:

lspci -vv | grep -A20 Ethernet

答案1

如果您删除*并将类别值扩展到 4 位,则将获得所需的结果

$ lspci -d ::0200
81:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
81:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)

更新:基于类的过滤器仅适用于 pciutils v3.3.0 或更高版本(请参阅变更日志)。对于 RHEL/CentOS,这意味着 7.3 或更高版本。

答案2

man lspci在我的系统中没有显示 -d 选项可用于显示类,但您可以在机器可读模式下获取它们的名称,从而对其进行 grepping。即:

$ lspci -vmm | grep -B1 -A2 '^Class.*Ethernet'
Slot:   08:00.0
Class:  Ethernet controller
Vendor: Intel Corporation
Device: 82574L Gigabit Network Connection

另一种选择是直接使用 sysfs。即您可以通过 modalias 中的“c02”字符串找到所有以太网设备:

$ find /sys/devices/ -name modalias | xargs grep -l c02
/sys/devices/pci0000:00/0000:00:1c.2/0000:03:00.0/modalias
                                          ^^^ PCI port

或使用 systool:

$ systool -b pci -A modalias | awk '
     /modalias.*c02/ { 
          system("/sbin/lspci -s " dev); } 
     { dev = $1; }'
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)

答案3

要获得您想要的结果,您需要使用此处找到的 pci ID,而不是您之前使用的:

http://pci-ids.ucw.cz/

例如,对于 vmware 以太网控制器,命令为:

lspci -d :07b0

相关内容