
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