Es mejor evitar el uso ifconfig
para obtener una dirección IP en una secuencia de comandos que está en desuso en algunas distribuciones (por ejemplo, CentOS y otras, ya no la instala por defecto).
En otros sistemas, la salida de ifconfig varía de acuerdo con el lanzamiento de la distribución (por ejemplo, la salida / espaciado / campos de ifconfig
difiere de Debian 8 a Debian 9, por ejemplo).
Para obtener la dirección IP con ip
, de manera similar, está preguntando:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
O mejor aún:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
O, como preguntas "IP ="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Adaptando descaradamente la idea de @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Salida normal:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
De man ip
:
-o, -oneline genera
cada registro en una sola línea, reemplazando los avances de línea con el carácter '\'. Esto es conveniente cuando desea contar registros con wc (1) o grep (1) la salida.
Vea un ejemplo de por qué ifconfig
no se recomienda: BBB: `bbb-conf --check` que muestra las direcciones IP como` inet` - ifconfig woes
Para entender por qué ifconfig
está saliendo, vea Diferencia entre los comandos 'ifconfig' e 'ip'
ifconfig
es de net-tools, que no ha podido mantenerse completamente al día con la pila de red de Linux durante mucho tiempo. También sigue usando ioctl para la configuración de la red, que es una forma fea y menos poderosa de interactuar con el núcleo.
Alrededor de 2005 se introdujo un nuevo mecanismo para controlar la pila de red: los sockets de netlink.
Para configurar la interfaz de red iproute2
se utiliza ese mecanismo de socket de enlace de red dúplex completo, a la vez que se ifconfig
basa en una llamada al sistema ioctl.