Isso funcionou para mim sob o vmware, onde há frequentemente esses arquivos (possivelmente você precisa dos módulos do kernel vmware):
- / sys / bus / pci / devices / 0000: ... / label
- / sys / barramento / pci / devices / 0000: ... / acpi_index
e este link de sinuca:
- / sys / barramento / pci / devices / 0000: ... / firmware_node
O rótulo do arquivo contém uma linha de texto como: Ethernet0 , Ethernet1 , etc e numerados de acordo com o número original no arquivo OVF.
O arquivo acpi_index tem um número (long int provavelmente), e os números quando classificados, correspondem à ordem original das interfaces no arquivo OVF ou à ordem definida na VM.
A parte do nome do arquivo do destino do link simbólico do firmware também é agrupada na mesma ordem das interfaces no arquivo OVF original.
por exemplo, ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:8b/device:8c
Você pode ler isso com readlink
sob o shell.
O mais útil é provavelmente o arquivo label , já que seria simples extrair a parte numérica do nome e usá-lo como um nome de dispositivo.
Você pode ler o rótulo de $dev
da seguinte forma:
read label < /sys/bus/pci/devices/$dev/label
e extraia o sufixo numérico da seguinte forma: ${label#Ethernet}
Como um dístico que não faz nada se não houver rótulo:
read label < /sys/bus/pci/devices/$dev/label && echo ${label#Ethernet}
Se você quiser processar todos os dispositivos para obter o pedido, poderá ler seus dispositivos de ethernet em ordem de ônibus, assim:
lspci -D -mm | sed -n -e 's/ "Ethernet controller".*//;T;p'
então você pode canalizá-lo para esse segmento para prefixar o rótulo
while read dev ; do read label < /sys/bus/pci/devices/$dev/label ; echo ${label#Ethernet} $dev ; done
Você pode classificar e remover o rótulo assim: sort | sed -e 's/.* //'
Toda a expressão para emitir todos os dispositivos Ethernet na ordem definida VMWARE é:
lspci -D -mm | sed -n -e 's/ "Ethernet controller".*//;T;p' | while read dev ; do read label < /sys/bus/pci/devices/$dev/label ; echo ${label#Ethernet} $dev ; done | sort | sed -e 's/.* //'