Listen Sie nur die Gerätenamen aller verfügbaren Netzwerkschnittstellen auf

Listen Sie nur die Gerätenamen aller verfügbaren Netzwerkschnittstellen auf

Ich möchte eine Liste aller verfügbaren Netzwerkgerätenamen auf meinem Linux-Server erhalten. Ich dachte mir, dass

ifconfig

würde funktionieren, allerdings erzeugt ifconfig ziemlich viel Ausgabe:

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  
          [...]

Was ich erreichen möchte, ist eine Liste wie

eth0
eth1
eth2
lo

oder noch besser einfach

eth0
eth1
eth2

Ich gehe davon aus, dass dies durch eine Kombination aus „cat“, „sed“ und „grep“ erreicht werden kann, habe aber einfach keine Ahnung, wie ich die unnötigen Informationen entfernen kann.

Antwort1

Probieren Sie Folgendes aus:

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

Dadurch werden folgende Elemente weggelassen lo:

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

Antwort2

Eine weitere Alternative wäre:

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

Oder vielleicht:

ls /sys/class/net

Antwort3

Verwenden Sie einfach /sys/class/net und entfernen Sie den Pfad:

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

Eine modernere Möglichkeit wäre, die JSON-Ausgabe von iproute und einen Parser zu verwenden, etwa:

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

Dadurch können Sie die Loopback-Schnittstelle herausfiltern:

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

Antwort4

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

oder wenn Sie nur eth* benötigen

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

verwandte Informationen