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.
*nix
utilidades, pero es lamentable que esta solución no funcione en una Mac :(ifconfig
está en desuso, úselo en suip
lugarifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
Otra alternativa sería:
O tal vez:
fuente
ls /sys/class/net
es una mejor solución en/etc/local.d
scripts enopenrc
- lassed
soluciones 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-8
extrae los primeros 8 caracteres de cada líneasort
ordena las líneasuniq -u
imprime 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),
ifconfig
usa pestañas en lugar de espacios, por lo que es un poco más complicado:expand
convierte 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
/sys
sistema de archivos:Usando ip y Perl:
fuente
Aquí hay una forma de extraer los nombres de interfaz de la
ifconfig
salida: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 foo
algrep
comando.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
awk
ignorará 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,
lo
que 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 -l
Los 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)logical
y lasridiculous
interfaces.Ninguna de las soluciones anteriores funcionó para mí, aquí está mi solución:
lo
interfazSalidas:
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