Qual opção de linha de comando lspci limitará a saída apenas a dispositivos "Ethernet"?

3

Tentando ver se é possível limitar a saída do comando lspci para mostrar apenas os dispositivos Ethernet. A opção -d parece que deveria funcionar, mas nada do que eu tentei faz o trabalho. Por exemplo:

lspci -d '*:*:02'

ainda mostra todas classes de dispositivos pci. Estou usando 02 como a classe pelos valores encontrados aqui: link

Para referência, aqui está a informação "man lspci" para a opção -d :

-d [<vendor>]:[<device>][:<class>] Show only devices with specified vendor, device and class ID. The ID's are given in hexadecimal and may be omitted or given as "*", both meaning "any value".

Atualmente estou usando o grep para filtrar a saída, e isso faz o trabalho:

lspci -vv | grep -A20 Ethernet
    
por Mark Edington 22.01.2017 / 10:44

3 respostas

4

man lspci no meu sistema não mostra que a opção -d pode ser usada para mostrar classes, mas você pode obter seus nomes no modo legível por máquina, assim como o grepping. Ou seja:

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

Outra opção seria usar o sysfs diretamente. Ou seja você pode encontrar todos os dispositivos ethernet pela string 'c02' em modalias:

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

ou usando o 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)
    
por 22.01.2017 / 11:03
2

Para obter os resultados desejados, você precisará usar os IDs pci encontrados aqui, e não o que você estava usando:

link

por exemplo, para um controlador de ethernet vmware, o comando seria:

lspci -d :07b0
    
por 24.01.2018 / 02:23
1

Se você remover o * e estender o valor da classe para 4 dígitos, o resultado desejado será alcançado

$ 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)

Atualizar : o filtro com base em classe funciona somente com pcitutils v3.3.0 ou posterior. Veja changelog
Para RHEL / CentOS isso significa 7.3 +

    
por 10.05.2018 / 10:28

Tags