Por defecto ifconfig
me mostrará todas las interfaces disponibles, pero ¿qué pasa si sólo quiero mostrar las activas
? Por ejemplo, en0
sólo en la parte inferior.
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 X.X.X.X 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**
Fíjate que ifconfig en0
no satisfará, en0
no es siempre la activa ;)
Estoy ejecutando Mac OS X.
Si sólo quiere imprimir la "entrada" si contiene status: active
, entonces podría usar algo como este programa awk como filtro a la salida 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 cada "entrada" empieza (una línea está vacía o no empieza con un Tabulador), empieza a guardar la entrada en un buffer. Añade a este buffer cualquier línea subsiguiente que empiece con un tabulador. Esté atento a la cadena mágica status: active
; si se ve una línea como esa, imprima el búfer (la "entrada" anterior) cuando comience una nueva "entrada" (o termine la entrada).
Guarde el texto del programa anterior en un archivo y utilícelo así:
ifconfig -a | awk -f /path/to/file
O, si chmod +x
el archivo, entonces usted puede simplificar un poco:
ifconfig -a | /path/to/file
Leyendo tus comentarios y tu pregunta, parece que en realidad sólo quieres obtener las interfaces que tienen una dirección IP asignada.
Puedes hacerlo rápidamente con ifconfig
y grep
.
Ejecutando el comando:
ifconfig | grep 'Link\|inet'
Debería producir algo similar a:
eth0 Enlace encap:Ethernet HWaddr 00:11:22:33:44:55 eth1 Enlace encap:Ethernet HWaddr 00:11:22:33:44:66 inet addr:192.168.0.8 Bcast:192.168.0.255 Mask:255.255.255.0 lo Link encap:Local Loopback inet addr:127.0.0.1 Máscara:255.0.0.0
Esto mostraría cada línea con un nombre de interfaz y y IP si tuvieran uno.
Un poco de magia REGEX más específica podría conseguir exactamente lo que necesita.
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2
Cómo funciona: