Liste apenas os nomes dos dispositivos de todas as interfaces de rede disponíveis

Liste apenas os nomes dos dispositivos de todas as interfaces de rede disponíveis

Quero obter uma lista de todos os nomes de dispositivos de rede disponíveis em meu servidor Linux. Eu imaginei isso

ifconfig

faria o trabalho, no entanto ifconfig produz bastante saída:

eth0      Link encap:Ethernet  Hardware Adresse 08:00:27:fc:5c:98  
          inet Adresse:192.168.2.222  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:41496 (40.5 KiB)  TX bytes:32503 (31.7 KiB)

eth1      Link encap:Ethernet  Hardware Adresse 08:00:27:e9:35:7d  
          [...]

eth2      Link encap:Ethernet  Hardware Adresse 08:00:27:ff:db:fe  
          [...]

lo        Link encap:Lokale Schleife  
          [...]

O que eu quero alcançar é uma lista como

eth0
eth1
eth2
lo

ou melhor ainda apenas

eth0
eth1
eth2

Presumo que isso possa ser feito por uma combinação de "cat", "sed" e "grep", mas simplesmente não tenho ideia de como remover as informações desnecessárias.

Responder1

Experimente:

ifconfig -a | sed 's/[ \t].*//;/^$/d'

Isso irá omitir lo:

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'

Responder2

Outra alternativa seria:

ip -o link show | awk -F': ' '{print $2}'

Ou talvez:

ls /sys/class/net

Responder3

Basta usar /sys/class/net e remover o caminho:

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0

Uma maneira mais moderna seria usar a saída json do iproute e um analisador, como:

$ ip -j link |jq -r '.[].ifname'
lo
wlp0s20f3
enp0s31f6
virbr0
virbr0-nic

O que permite filtrar a interface de loopback:

$ ip -j link |jq -r '.[].ifname | select(. != "lo")'
wlp0s20f3
enp0s31f6
virbr0
virbr0-nic

Responder4

ls /sys/class/net/
eth0  eth1  eth2  lo

ou se você precisar apenas de eth*

ls /sys/class/net/eth*
eth0
eth1
eth2

informação relacionada