web-dev-qa-db-fra.com

Répertorie uniquement les noms de périphérique de toutes les interfaces réseau disponibles

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.

18
ftiaronsem

Essayez ceci:

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

Ceci omettra lo:

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

Une autre alternative serait:

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

Ou peut-être:

ls /sys/class/net
20
jweyrich

Utilisez simplement/sys/class/net et extrayez le chemin:

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

Essaye ça:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 extrait les 8 premiers caractères de chaque ligne
  • sort trie les lignes
  • uniq -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ères

Cela 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 espaces
  • awk -F: '{print $1;}' imprime le premier champ avant les deux points.
5
Doug Harris
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
4
wWolfovich

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]'
3
someguy
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

fournit

lo:
eth0:
eth1:
eth2:

en sortie

1
Promod

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}'
1
MaQleod

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.

1
Gilles

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.

1
Mogens TrasherDK

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'

1
Syberam

Amélioré:

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

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 
1
C0deDaedalus

Aucune des solutions ci-dessus n'a fonctionné pour moi, voici ma solution:

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. Lister toutes les interfaces disponibles
  2. Extraire uniquement les lignes contenant les noms de périphériques (pas d'espace au début)
  3. Supprimer la partie finale non liée qui est après du premier espace
  4. Exclure lo interface

Les sorties:

eth0
eth0:1
wlan0
0
ceremcem

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

0
OLD SOUL