Je veux obtenir une liste de tous les noms de périphériques réseau disponibles sur mon serveur Linux. Je pensais que
ifconfig
ferait le travail, cependant ifconfig produit beaucoup de sortie:
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
[...]
Ce que je veux réaliser, c'est une liste comme
eth0
eth1
eth2
lo
ou encore mieux
eth0
eth1
eth2
Je suppose que cela peut être fait par une combinaison de "chat", "sed" et "grep", mais je n'ai tout simplement aucune idée de la façon de supprimer les informations inutiles.
*nix
utilitaires différents , mais il est regrettable que cette solution ne fonctionne pas sur un Mac :(ifconfig
est déprécié, utilisezip
plutôtifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
Une autre alternative serait:
Ou peut-être:
la source
ls /sys/class/net
est une meilleure solution dans les/etc/local.d
scripts dansopenrc
- lessed
solutions ci-dessus se retrouvent avec un supplément:
à la fin de chaque interface lors de l'exécution/etc/init.d/local
(mais pas lorsque le script est exécuté directement).-o
- ne le savait pasUtilisez simplement / sys / class / net et supprimez le chemin:
la source
Essaye ça:
cut -c 1-8
extrait les 8 premiers caractères de chaque lignesort
trie les lignesuniq -u
imprime uniquement les lignes uniques qui supprimeront les lignes vides pour les lignes de description qui n'ont que des espaces dans leurs huit premiers caractèresCela fonctionne sur deux machines Linux que j'ai essayées, mais sur mon MacBookPro (OS X 10.6.4),
ifconfig
utilise des tabulations au lieu d'espaces, c'est donc un peu plus compliqué:expand
convertit les tabulations en espacesawk -F: '{print $1;}'
imprime le premier champ avant deux points.la source
| grep -v lo
:-)ou si vous n'avez besoin que d'eth *
la source
Utilisation du
/sys
système de fichiers:Utiliser ip et Perl:
la source
Voici une façon d'extraire les noms d'interface de la
ifconfig
sortie:Si vous souhaitez exclure certains noms, une méthode consiste à filtrer davantage avec
grep
:Si vous souhaitez exclure plus de noms, ajoutez-en plus
-e foo
à lagrep
commande.la source
pour simplement imprimer la première colonne:
vous pouvez incorporer d'autres règles dans awk pour ajouter ou supprimer des entrées selon vos besoins.
EDIT: il en va de même avec ifconfig (comme l'a souligné Doug)
Ceci est un exemple excluant l'interface 'lo'
la source
awk
ignorera le premier espace blanc et imprimera également le premier mot de chaque ligne suivante.fournit
en sortie
la source
Même s'il existe une solution acceptée, je voudrais présenter ma solution à cela.
J'ai un tas d'interfaces virtuelles, et je voudrais obtenir une liste, utilisable dans divers scripts bash.
Je ne suis pas intéressé par le bouclage, car je sais qu'il est là :)
Ce one-liner fait le travail:
Produit une sortie comme:
Prendre plaisir.
la source
Toutes les solutions ci-dessus fonctionnent bien. Vous pouvez toujours essayer ceci
Étant donné que,
lo
qui est un bouclage, aucune adresse matérielle n'est attribuée, il n'apparaîtra pas.Production -
la source
La solution la plus simple est chez l'homme ifconfig (8)
extrait de man ifconfig (8) http://www.manpagez.com/man/8/ifconfig/ :
Donc, pour avoir la liste, utilisez:
ifconfig -l
Les noms seront séparés par un espace, vous devez donc utiliser sed pour remplacer ces espaces par un \ n:
ifconfig -l | sed 's/ / /g'
la source
Amélioré:
la source
grep -v '^lo$'
; votre commande actuelle exclura (exemple hypothétique)logical
et lesridiculous
interfaces.Aucune des solutions ci-dessus n'a fonctionné pour moi, voici ma solution:
lo
interfaceLes sorties:
la source
"ifcongif -l" devrait faire l'affaire. sa sortie est comme ceci "lo0 gif0 stf0 en0 ..." sans nouvelle ligne.
Je l'ai trouvé sur un site Web mais je ne le trouve plus. et je cherche toujours la signification de ce drapeau "-l".
la source
Parfois, nettools n'est pas installé par défaut. Donc, j'aime utiliser des commandes intégrées qui ont plus de garantie d'être trouvées dans / bin, / usr / bin et / usr / sbin sans avoir à se soucier des paquets post-installés.
ip addr: afficher / manipuler le routage, les périphériques, le routage des politiques et les tunnels (adresse)
grep: trouver un espace puis n'importe quoi après unitl:
cut: utiliser (:) comme délimiteur et obtenir le champ 2
tr: supprimer tous les espaces
la source
Testé sur macOS, ce qui suit a fonctionné. J'avais besoin de trouver toutes les interfaces UP. Ceci est basé sur la réponse de Dennis Williamson ci-dessus.
ifconfig -a | grep UP | sed 's/:.*//;/^$/d'
la source
ifconfig | grep flags | awk -F: '{print $1;}'
la source