Chcę uzyskać listę wszystkich dostępnych nazw urządzeń sieciowych na moim serwerze Linux. zauważyłem to
ifconfig
wykona zadanie, jednak ifconfig generuje dość dużo danych wyjściowych:
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
[...]
Chcę osiągnąć taką listę
eth0
eth1
eth2
lo
lub nawet lepiej
eth0
eth1
eth2
Zakładam, że można to zrobić za pomocą kombinacji „cat”, „sed” i „grep”, ale po prostu nie mam pojęcia, jak usunąć niepotrzebne informacje.
*nix
narzędzia, ale to niefortunne to rozwiązanie nie działa na Macu :(ifconfig
jest przestarzałe, użyjip
zamiastifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
Inną alternatywą byłoby:
Albo może:
źródło
ls /sys/class/net
jest lepszym rozwiązaniem w/etc/local.d
skrypty wopenrc
-sed
powyższe rozwiązania kończą się dodatkiem:
na końcu każdego interfejsu podczas uruchamiania/etc/init.d/local
(ale nie wtedy, gdy skrypt jest uruchamiany bezpośrednio).-o
- nie wiedziałem o tymPo prostu użyj / sys / class / net i usuń ścieżkę:
źródło
Spróbuj tego:
cut -c 1-8
wyodrębnia pierwszych 8 znaków z każdej liniisort
sortuje linieuniq -u
wypisuje tylko unikalne linie, które usuwają puste linie w liniach opisu, które mają tylko spacje w pierwszych ośmiu znakachDziała to na dwóch komputerach z Linuksem, które próbowałem, ale na moim MacBookPro (OS X 10.6.4),
ifconfig
używa kart zamiast spacji, więc jest nieco bardziej skomplikowane:expand
konwertuje karty na spacjeawk -F: '{print $1;}'
wypisuje pierwsze pole przed dwukropkiem.źródło
| grep -v lo
:-)lub jeśli potrzebujesz tylko eth *
źródło
Za pomocą
/sys
system plików:Korzystanie z IP i Perla:
źródło
Oto jeden ze sposobów wyodrębnienia nazw interfejsów z
ifconfig
wydajność:Jeśli chcesz wykluczyć pewne nazwy, możesz filtrować jeden sposób
grep
:Jeśli chcesz wykluczyć więcej nazw, dodaj więcej
-e foo
dogrep
dowództwo.źródło
po prostu wydrukować pierwszą kolumnę:
możesz włączyć inne reguły w awk, aby dodawać lub usuwać wpisy w razie potrzeby.
EDYCJA: to samo dotyczy ifconfig (jak wskazał Doug)
Oto przykład wykluczający interfejs „lo”
źródło
awk
zignoruje wiodącą białą spację i wydrukuje pierwsze słowo w każdej kolejnej linii.zapewnia
jako wyjście
źródło
Mimo że istnieje zaakceptowane rozwiązanie, chciałbym przedstawić moje rozwiązanie tego.
Mam kilka wirtualnych interfejsów i chciałbym dostać listę, użyteczny w różnych skryptach bash.
Nie interesuje mnie pętla zwrotna, ponieważ wiem, że tam jest :)
Ten jeden liner wykonuje zadanie:
Tworzy wyjście takie jak:
Cieszyć się.
źródło
Wszystkie powyższe rozwiązania działają poprawnie. Nadal możesz spróbować
Od,
lo
która jest pętlą zwrotną, nie ma przypisanego adresu sprzętowego, nie pojawi się.Wyjście -
źródło
Najprostszym rozwiązaniem jest man ifconfig (8)
Wyciąg man ifconfig (8) http://www.manpagez.com/man/8/ifconfig/ :
Aby mieć listę, użyj:
ifconfig -l
Nazwy zostaną oddzielone spacją, więc musisz użyć sed, aby zastąpić te spacje n:
ifconfig -l | sed 's/ / /g'
źródło
Ulepszony:
źródło
grep -v '^lo$'
; Twoje obecne polecenie wyklucza (przykład hipotetyczny)logical
iridiculous
interfejsy.Żadne z powyższych rozwiązań nie zadziałało dla mnie, oto moje rozwiązanie:
lo
berłoWyjścia:
źródło
ifconfig | grep flags | awk -F: '{print $1;}'
źródło