Quiero obtener una lista de todos los nombres de dispositivos de red disponibles en mi servidor Linux. Lo imaginé
ifconfig
haría el trabajo, sin embargo, ifconfig produce bastante salida:
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
[...]
Lo que quiero lograr es una lista como
eth0
eth1
eth2
lo
o incluso mejor solo
eth0
eth1
eth2
Supongo que esto se puede hacer mediante una combinación de "gato", "sed" y "grep", pero simplemente no tengo idea de cómo quitar la información innecesaria.

*nixutilidades, pero es lamentable que esta solución no funcione en una Mac :(ifconfigestá en desuso, úselo en suiplugarifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'Otra alternativa sería:
O tal vez:
fuente
ls /sys/class/netes una mejor solución en/etc/local.dscripts enopenrc- lassedsoluciones anteriores terminan con un extra:al final de cada interfaz cuando se ejecutan desde/etc/init.d/local(pero no cuando el script se ejecuta directamente).-o- no sabía esoSimplemente use / sys / class / net y elimine el camino:
fuente
Prueba esto:
cut -c 1-8extrae los primeros 8 caracteres de cada líneasortordena las líneasuniq -uimprime solo líneas únicas que eliminarán las líneas en blanco de las líneas descriptivas que solo tienen espacios en sus primeros ocho caracteresEsto funcionó en dos máquinas Linux que probé, pero en mi MacBookPro (OS X 10.6.4),
ifconfigusa pestañas en lugar de espacios, por lo que es un poco más complicado:expandconvierte pestañas en espaciosawk -F: '{print $1;}'imprime el primer campo antes de los dos puntos.fuente
| grep -v lo:-)o si solo necesitas eth *
fuente
Usando el
/syssistema de archivos:Usando ip y Perl:
fuente
Aquí hay una forma de extraer los nombres de interfaz de la
ifconfigsalida:Si desea excluir ciertos nombres, una forma es filtrar aún más con
grep:Si desea excluir más nombres, agregue más
-e fooalgrepcomando.fuente
para imprimir la primera columna:
Puede incorporar otras reglas en awk para agregar o eliminar entradas según sea necesario.
EDITAR: lo mismo ocurre con ifconfig (como señaló Doug)
Este es un ejemplo que excluye la interfaz 'lo'
fuente
awkignorará el espacio en blanco inicial e imprimirá la primera palabra en cada línea posterior también.proporciona
como salida
fuente
Aunque exista una solución aceptada, me gustaría presentar mi solución a esto.
Tengo un montón de interfaces virtuales, y me gustaría obtener una lista, utilizable en varios scripts de bash.
No estoy interesado en el loopback, ya que sé que está allí :)
Este one-liner hace el trabajo:
Produce una salida como:
Disfrutar.
fuente
Toda la solución anterior funciona bien. Aún así puedes probar esto
Como,
loque es loopback, no tiene asignada una dirección HW, no aparecerá.Salida -
fuente
La solución más fácil está en el hombre ifconfig (8)
man ifconfig (8) extracto http://www.manpagez.com/man/8/ifconfig/ :
Entonces, para tener la lista, use:
ifconfig -lLos nombres estarán separados por un espacio, por lo que debe usar sed para reemplazar estos espacios por un \ n:
ifconfig -l | sed 's/ / /g'fuente
Mejorado:
fuente
grep -v '^lo$'; su comando actual excluirá el (ejemplo hipotético)logicaly lasridiculousinterfaces.Ninguna de las soluciones anteriores funcionó para mí, aquí está mi solución:
lointerfazSalidas:
fuente
"ifcongif -l" debería hacer el trabajo. su salida es así "lo0 gif0 stf0 en0 ..." sin nueva línea.
Lo encontré en algún sitio web pero ya no puedo encontrarlo. y todavía estoy buscando el significado de esa bandera "-l".
fuente
Algunas veces, nettools no está instalado de manera predeterminada. Por lo tanto, me gusta usar comandos integrados que tienen más garantía dentro de / bin, / usr / bin y / usr / sbin sin tener que preocuparme por los paquetes instalados.
ip addr: muestra / manipula enrutamiento, dispositivos, enrutamiento de políticas y túneles (dirección)
grep: busca un espacio y luego cualquier cosa después de unitl:
cut: usa (:) como delimitador y obtén el campo 2
tr: elimina cualquier espacio
fuente
Probado en macOS, funcionó lo siguiente. Necesitaba encontrar todas las interfaces que estaban ARRIBA. Esto se basa en la respuesta de Dennis Williamson arriba.
ifconfig -a | grep UP | sed 's/:.*//;/^$/d'fuente
ifconfig | grep flags | awk -F: '{print $1;}'fuente