Je souhaite 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 est une liste comme
eth0
eth1
eth2
lo
ou mieux encore juste
eth0
eth1
eth2
Je suppose que cela peut être fait en combinant "cat", "sed" et "grep", mais je ne sais tout simplement pas comment supprimer l'information inutile.
Essayez ceci:
ifconfig -a | sed 's/[ \t].*//;/^$/d'
Ceci omettra lo
:
ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'
Une autre alternative serait:
ip -o link show | awk -F': ' '{print $2}'
Ou peut-être:
ls /sys/class/net
Utilisez simplement/sys/class/net et extrayez le chemin:
$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0
Essaye ça:
ifconfig | cut -c 1-8 | sort | uniq -u
cut -c 1-8
extrait les 8 premiers caractères de chaque lignesort
trie les lignesuniq -u
imprime seulement les lignes uniques qui vont supprimer 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é:
ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
expand
convertit les tabulations en espacesawk -F: '{print $1;}'
imprime le premier champ avant les deux points.ls /sys/class/net/
eth0 eth1 eth2 lo
ou si vous n'avez besoin que d'eth *
ls /sys/class/net/eth*
eth0
eth1
eth2
Utilisation du système de fichiers /sys
:
basename -a $(ls /sys/devices/**/net/* -d)
Utiliser ip et Perl:
ip -o l|Perl -lane'$F[1]=~s/://g;print $F[1]'
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'
fournit
lo:
eth0:
eth1:
eth2:
en sortie
simplement imprimer la première colonne:
netstat -a | awk '{print $1}'
vous pouvez incorporer d'autres règles dans awk pour ajouter ou supprimer des entrées si nécessaire.
EDIT: idem pour ifconfig (comme l'a souligné Doug)
ifconfig | awk '{print $1}'
Ceci est un exemple excluant l'interface 'lo'
ifconfig | awk '{if ($1 != lo) print $1}'
Voici un moyen d'extraire les noms d'interface de la sortie ifconfig
:
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p'
Si vous souhaitez exclure certains noms, vous pouvez également filtrer avec grep
:
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo
Si vous souhaitez exclure plus de noms, ajoutez plus -e foo
à la commande grep
.
Même si une solution acceptée existe, je voudrais présenter ma solution à cela.
J'ai un tas d'interfaces virtuelles et j'aimerais obtenir une liste utilisable dans divers scripts bash.
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
Je ne suis pas intéressé par le bouclage, car je sais que c'est là-bas :)
Ce one-liner fait le travail:
ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"
Produit une sortie comme:
eth0
eth0:1
eth0:2
eth0:3
Prendre plaisir.
La solution la plus simple est dans l'homme ifconfig (8)
man ifconfig (8) extrait (http://www.manpagez.com/man/8/ifconfig/ :
L'option -l peut être utilisée pour répertorier toutes les interfaces disponibles sur le système, sans autre information supplémentaire. L'utilisation de cet indicateur est mutuellement exclusive avec tous les autres indicateurs et commandes, à l'exception de -d (uniquement les interfaces de liste en panne) et -u (uniquement les interfaces de liste en haut).
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'
Amélioré:
netstat -i | grep '^[a-z]' | awk '{print $1}' | grep -v 'lo'
Toute la solution ci-dessus fonctionne bien. Vous pouvez toujours essayer ceci
ifconfig | grep HW | cut -c 1-6
Depuis, lo
qui correspond à un bouclage, n’a pas d’adresse matérielle, cela n’apparaîtra pas.
Sortie -
root @ glum:/home/amit # ifconfig | grep HW | cut -c 1-6 enp7s0 vmnet1 vmnet8 wlp6s0
Aucune des solutions ci-dessus n'a fonctionné pour moi, voici ma solution:
ifconfig -a | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
lo
interfaceLes sorties:
eth0
eth0:1
wlan0
"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".