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

Mar*_*ton 5 linux pci

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

lspci -d '*:*:02'
Run Code Online (Sandbox Code Playgroud)

仍然显示所有PCI 设备类别。我使用02这里找到的值作为类:http://pci-ids.ucw.cz/read/PD/02

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

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

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

lspci -vv | grep -A20 Ethernet
Run Code Online (Sandbox Code Playgroud)

小智 8

如果您删除*并将类别值扩展到 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)
Run Code Online (Sandbox Code Playgroud)

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


mya*_*aut 3

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

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

另一种选择是直接使用 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
Run Code Online (Sandbox Code Playgroud)

或使用 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)
Run Code Online (Sandbox Code Playgroud)