Ich möchte eine Liste aller verfügbaren Netzwerkgerätenamen auf meinem Linux-Server erhalten. Das habe ich mir gedacht
ifconfig
würde die Arbeit erledigen, aber ifconfig erzeugt 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 von "cat", "sed" und "grep" geschehen kann, aber ich habe einfach keine Ahnung, wie man die nicht benötigten Informationen entfernt.
*nix
Dienstprogramme enthalten , aber es ist bedauerlich, dass diese Lösung auf einem Mac nicht funktioniert :(ifconfig
wird abgelehnt, verwenden Sieip
stattdessenifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
Eine andere Alternative wäre:
Oder vielleicht:
quelle
ls /sys/class/net
ist eine bessere Lösung für/etc/local.d
Skripte inopenrc
- Diesed
oben genannten Lösungen haben:
am Ende jeder Schnittstelle ein Extra , wenn sie ausgeführt werden/etc/init.d/local
(jedoch nicht, wenn das Skript direkt ausgeführt wird).-o
- wusste nicht, dassBenutze einfach / sys / class / net und entferne den Pfad:
quelle
Versuche dies:
cut -c 1-8
extrahiert die ersten 8 Zeichen jeder Zeilesort
sortiert die Zeilenuniq -u
druckt nur eindeutige Zeilen, wodurch die Leerzeilen für die Beschreibungszeilen entfernt werden, deren erste acht Zeichen nur Leerzeichen enthaltenDies funktioniert auf zwei Linux-Rechnern, die ich ausprobiert habe, aber auf meinem MacBookPro (OS X 10.6.4)
ifconfig
werden Tabulatoren anstelle von Leerzeichen verwendet, sodass es etwas komplizierter ist:expand
konvertiert Tabulatoren in Leerzeichenawk -F: '{print $1;}'
druckt das erste Feld vor einem Doppelpunkt.quelle
| grep -v lo
:-)oder wenn du nur eth brauchst
quelle
Mit
/sys
Dateisystem:Mit ip und Perl:
quelle
Hier ist eine Möglichkeit, die Schnittstellennamen aus der
ifconfig
Ausgabe zu extrahieren :Wenn Sie bestimmte Namen ausschließen möchten, können Sie auch nach folgenden Kriterien filtern
grep
:Wenn Sie weitere Namen ausschließen möchten, fügen Sie
-e foo
demgrep
Befehl weitere hinzu.quelle
um nur die erste Spalte auszudrucken:
Sie können andere Regeln in awk einbinden, um Einträge nach Bedarf hinzuzufügen oder zu entfernen.
BEARBEITEN: das gleiche gilt für ifconfig (wie Doug betonte)
Dies ist ein Beispiel ohne die 'lo'-Schnittstelle
quelle
awk
ignoriert den führenden Leerraum und gibt auch das erste Wort in jeder folgenden Zeile aus.bietet
als Ausgabe
quelle
Obwohl es eine akzeptierte Lösung gibt, möchte ich meine Lösung dazu vorstellen.
Ich habe eine Reihe von virtuellen Schnittstellen und möchte eine Liste erhalten, die in verschiedenen Bash-Skripten verwendet werden kann.
Loopback interessiert mich nicht, da ich weiß, dass es da ist :)
Dieser Einzeiler erledigt die Arbeit:
Erzeugt eine Ausgabe wie:
Genießen.
quelle
Alle oben genannten Lösungen funktionieren einwandfrei. Trotzdem kannst du das versuchen
Da
lo
dem Loopback keine HW-Adresse zugewiesen wurde, wird es nicht angezeigt.Ausgabe -
quelle
Die einfachste Lösung liegt im man ifconfig (8)
man ifconfig (8) extrahiert http://www.manpagez.com/man/8/ifconfig/ :
Also, um die Liste zu haben, verwenden Sie:
ifconfig -l
Die Namen werden durch ein Leerzeichen getrennt, sodass Sie sed verwenden müssen, um diese Leerzeichen durch ein \ n zu ersetzen:
ifconfig -l | sed 's/ / /g'
quelle
Verbessert:
quelle
grep -v '^lo$'
; Ihr aktueller Befehl schließt das (hypothetische Beispiel)logical
und dieridiculous
Schnittstellen aus.Keine der oben genannten Lösungen hat für mich funktioniert, hier ist meine Lösung:
lo
SchnittstelleAusgänge:
quelle
"ifcongif -l" sollte den Job machen. Die Ausgabe ist wie folgt: "lo0 gif0 stf0 en0 ..." ohne Zeilenumbruch.
Ich habe es auf einer Website gefunden, kann es aber nicht mehr finden. und ich suche immer noch nach der Bedeutung dieser "-l" Flagge.
quelle
Manchmal ist nettools nicht standardmäßig installiert. Daher verwende ich gerne integrierte Befehle, die mehr Garantien in / bin, / usr / bin und / usr / sbin enthalten, ohne mich um nachinstallierte Pakete kümmern zu müssen.
ip addr: zeige / manipuliere Routing, Geräte, Richtlinienrouting und Tunnel (Adresse)
grep: finde ein Leerzeichen und dann irgendetwas nach unitl:
cut: benutze (:) als Begrenzer und erhalte Feld 2
tr: lösche Leerzeichen
quelle
Getestet unter macOS hat Folgendes funktioniert. Ich musste alle Schnittstellen finden, die UP waren. Dies basiert auf der Antwort von Dennis Williamson oben.
ifconfig -a | grep UP | sed 's/:.*//;/^$/d'
quelle
ifconfig | grep flags | awk -F: '{print $1;}'
quelle