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


21

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.

Antworten:


17

Probieren Sie es aus:

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

Dies wird weglassen lo:

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

Danke dennis, das hat wie ein zauber geklappt ^^. Perfekt. Reguläre Ausdrücke sind wirklich etwas, in das ich schauen sollte ^^
ftiaronsem

Mir ist klar, dass Linux und BSD oft unterschiedliche *nixDienstprogramme enthalten , aber es ist bedauerlich, dass diese Lösung auf einem Mac nicht funktioniert :(
blong

ifconfigwird abgelehnt, verwenden Sie ipstattdessen
pstanton

Dies scheint für OS X zu funktionieren:ifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
Bis auf weiteres angehalten.

22

Eine andere Alternative wäre:

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

Oder vielleicht:

ls /sys/class/net

using ls /sys/class/netist eine bessere Lösung für /etc/local.dSkripte in openrc- Die sedoben 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).
Stuart Cardall

+1 für -o- wusste nicht, dass
Patryk

16

Benutze einfach / sys / class / net und entferne den Pfad:

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

6

Versuche dies:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 extrahiert die ersten 8 Zeichen jeder Zeile
  • sort sortiert die Zeilen
  • uniq -u druckt nur eindeutige Zeilen, wodurch die Leerzeilen für die Beschreibungszeilen entfernt werden, deren erste acht Zeichen nur Leerzeichen enthalten

Dies funktioniert auf zwei Linux-Rechnern, die ich ausprobiert habe, aber auf meinem MacBookPro (OS X 10.6.4) ifconfigwerden Tabulatoren anstelle von Leerzeichen verwendet, sodass es etwas komplizierter ist:

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
  • expand konvertiert Tabulatoren in Leerzeichen
  • awk -F: '{print $1;}' druckt das erste Feld vor einem Doppelpunkt.

Vielen Dank, insbesondere für die sehr ausführliche Erklärung der verwendeten Parameter. Wenn ich in Zukunft ein ähnliches Problem haben werde, weiß ich, auf welchen Beitrag ich schauen muss ;-). Leider wurde nicht "lo" geschnitten, so dass die akzeptierte Antwort an Dennis geht. Aber das ist wirklich eine sehr nützliche Antwort, danke :-)
ftiaronsem

add | grep -v lo:-)
Doug Harris

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

oder wenn du nur eth brauchst

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

3

Mit /sysDateisystem:

basename -a $(ls /sys/devices/**/net/* -d)

Mit ip und Perl:

ip -o l|perl -lane'$F[1]=~s/://g;print $F[1]'

1

Hier ist eine Möglichkeit, die Schnittstellennamen aus der ifconfigAusgabe zu extrahieren :

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p'

Wenn Sie bestimmte Namen ausschließen möchten, können Sie auch nach folgenden Kriterien filtern grep:

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo

Wenn Sie weitere Namen ausschließen möchten, fügen Sie -e foodem grepBefehl weitere hinzu.


Ihre Lösung funktioniert genauso gut wie die von Dennis. Leider kann ich zwei Posts nicht akzeptieren, also war Dennis einfach schneller. Aber trotzdem danke, vor allem für deine grep Erklärung.
FTIARONSEM

1

um nur die erste Spalte auszudrucken:

netstat -a | awk '{print $1}'

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)

ifconfig | awk '{print $1}'

Dies ist ein Beispiel ohne die 'lo'-Schnittstelle

ifconfig | awk '{if ($1 != lo) print $1}'

Das geht nicht awkignoriert den führenden Leerraum und gibt auch das erste Wort in jeder folgenden Zeile aus.
Doug Harris

Leider funktioniert das in der Tat nicht und genau das Problem, auf das Doug hingewiesen hat. Aber danke für deine Hilfe, trotzdem schätze ich es sehr, dass du einem Newby wie mir hilfst.
FTIARONSEM

1
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

bietet

lo:
eth0:
eth1:
eth2:

als Ausgabe


1

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.

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.137  netmask 255.255.255.192  broadcast 11.22.33.191
        inet6 fe80::a00:27ff:fe8c:6bd3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)
        RX packets 2969136  bytes 2394432908 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378821  bytes 358960701 (342.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.189  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.190  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.180  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 673768  bytes 277972236 (265.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673768  bytes 277972236 (265.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Loopback interessiert mich nicht, da ich weiß, dass es da ist :)

Dieser Einzeiler erledigt die Arbeit:

ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"

Erzeugt eine Ausgabe wie:

eth0
eth0:1
eth0:2
eth0:3

Genießen.


1

Alle oben genannten Lösungen funktionieren einwandfrei. Trotzdem kannst du das versuchen

ifconfig | grep HW | cut -c 1-6

Da lodem Loopback keine HW-Adresse zugewiesen wurde, wird es nicht angezeigt.

Ausgabe -

root @ glum: / home / amit # ifconfig | grep HW | schnitt -c 1-6
enp7s0
vmnet1
vmnet8
wlp6s0

1

Die einfachste Lösung liegt im man ifconfig (8)

man ifconfig (8) extrahiert http://www.manpagez.com/man/8/ifconfig/ :

Das Flag -l kann verwendet werden, um alle verfügbaren Schnittstellen im System ohne weitere zusätzliche Informationen aufzulisten. Die Verwendung dieses Flags schließt sich gegenseitig mit allen anderen Flags und Befehlen aus, mit Ausnahme von -d (nur Listenschnittstellen, die nicht aktiv sind) und -u (nur Listenschnittstellen, die aktiv sind).

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'


1

Verbessert:

netstat -i | grep '^[a-z]' | awk '{print $1}' | grep -v 'lo'

1
Das solltest du wahrscheinlich machen grep -v '^lo$'; Ihr aktueller Befehl schließt das (hypothetische Beispiel) logicalund die ridiculousSchnittstellen aus.
Scott

0

Keine der oben genannten Lösungen hat für mich funktioniert, hier ist meine Lösung:

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. Alle verfügbaren Schnittstellen auflisten
  2. Extrahieren Sie nur die Zeilen, die Gerätenamen enthalten (kein Leerzeichen am Anfang)
  3. Entfernen Sie den nicht dazugehörigen nachlaufenden Teil aus dem ersten Raum
  4. Ausschließen loSchnittstelle

Ausgänge:

eth0
eth0:1
wlan0

0

"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.


0

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

$ ip addr | grep -E ': \ s. * ?:' | cut -d ":" -f 2 | tr -d ""

0

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'


-1

ifconfig | grep flags | awk -F: '{print $1;}'


1
Könnten Sie bitte erweitern und erklären, was dies tut? Einzeilige Antworten sind im Allgemeinen kein gutes Format für Superuser.
Doktoro Reichard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.