Cómo usar ifconfig para mostrar solo la interfaz activa

Por defecto, ifconfig me mostrará todas las interfaces disponibles, pero ¿qué ocurre si solo quiero mostrar las active ? Como, en0 solo en abajo.

 en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 14:10:9f:e0:eb:c9 inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4 inet XXXX netmask 0xffffff00 broadcast 101.6.69.255 nd6 options=1<PERFORMNUD> media: autoselect **status: active** en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 options=60<TSO4,TSO6> ether 32:00:14:e7:4f:80 media: autoselect <full-duplex> **status: inactive** 

Observe que ifconfig en0 no cumplirá, en0 no siempre es el activo;)

Estoy ejecutando Mac OS X.

Para get una descripción completa de todos los services activos, intente:

 ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' 

Esta simple expresión regular debería filtrar solo las interfaces activas y toda su información. Supongo que pones un alias para esto en tu file ~ / .profile o ~ / .bash_profile (¿quizás ifconfiga?)

Para get el nombre de la interfaz (útil para las secuencias de commands), use:

 ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' | egrep -o -m 1 '^[^\t:]+' 

Tienes que instalar pcregrep para que esto funcione. Está en macports en el package pcre. Alternativamente, esto debería funcionar con grep de GNU usando grep -Pzo lugar de pcregrep -M -o pero con el rest igual, pero no lo he probado.

Si solo desea imprimir la "input" si contiene el status: active , entonces podría usar algo como este progtwig awk como filter para el resultado ifconfig :

 #!/usr/bin/awk -f BEGIN { print_it = 0 } /status: active/ { print_it = 1 } /^($|[^\t])/ { if(print_it) print buffer; buffer = $0; print_it = 0 } /^\t/ { buffer = buffer "\n" $0 } END { if(print_it) print buffer } 

Cuando se inicia cada "input" (una línea está vacía o no comienza con una pestaña), comience a save la input en un búfer. Agregue a este buffer cualquier línea subsiguiente que comience con una pestaña. Esté atento al status: active cadena mágica status: active ; si se ve una línea como esa, imprima el búfer (la "input" anterior) cuando se inicia una nueva "input" (o la input finaliza).

Guarde el text del progtwig anterior en un file y úselo de esta manera:

 ifconfig -a | awk -f /path/to/file 

O bien, si chmod +x el file, entonces puede simplificarlo un poco:

 ifconfig -a | /path/to/file 

Al leer sus comentarios y preguntas, parece que realmente desea get las interfaces que tienen asignada una dirección IP.

Puede hacerlo rápidamente con ifconfig y grep .

Ejecutando el command:

 ifconfig | grep 'Link\|inet' 

Debe producir algo similar a:

 Encapsulado eth0 Link: Ethernet HWaddr 00: 11: 22: 33: 44: 55
 Encapsulado eth1 Link: Ethernet HWaddr 00: 11: 22: 33: 44: 66  
           inet addr: 192.168.0.8 Bcast: 192.168.0.255 Máscara: 255.255.255.0
 lo Link encap: Loopback local  
           inet addr: 127.0.0.1 Máscara: 255.0.0.0

Esto mostraría cada línea con un nombre de interfaz e IP si tenían una.

Un poco de magia REGEX más específica puede get exactamente lo que necesita.

A continuación, se imprimirán solo aquellas interfaces que están configuradas para tener una IP

 ifconfig | grep "inet.*broadcast" 
 $ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2 

Cómo funciona:

  • ifconfig
  • Grep para líneas que contienen "inet addr"
    • Estas líneas contienen las direcciones IP.
  • Grep para líneas que no contienen "127.0.0.1"
    • Por lo general, no nos importa el localhost.
    • -v es grep invertido
  • De las líneas restantes, elimine el "Bcast"
  • Corta el campo 2 usando ":" como delimitador
    • Imprime la respuesta.