GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo capturar la primera dirección IP de un comando ifconfig?

Es mejor evitar usar ifconfig para obtener una dirección IP en un script, ya que está en desuso en algunas distribuciones (por ejemplo, CentOS y otras, ya no lo instale de forma predeterminada).

En otros sistemas, la salida de ifconfig varía según 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ás 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 pides "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

Desde man ip :

-o, -una línea
genera cada registro en una sola línea, reemplazando los saltos de línea con el carácter '\'. Esto es conveniente cuando desea contar registros con wc(1) o grep(1) en la salida.

Vea un ejemplo de por qué ifconfig no se recomienda:BBB:`bbb-conf --check` mostrando direcciones IP como `inet` - problemas de ifconfig

Para entender por qué ifconfig está a punto de salir, consulte 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 red, que es una forma fea y menos potente de interactuar con el núcleo.

Alrededor de 2005, se introdujo un nuevo mecanismo para controlar la pila de red:los sockets de enlace de red.

Para configurar la interfaz de red iproute2 hace uso de ese mecanismo de socket de enlace de red full-duplex, mientras que ifconfig se basa en la llamada al sistema anioctl.


Awk solución:

ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'

Salida de muestra:

IP=10.0.2.15

Linux
  1. ¿Cómo detener el comando Buscar después de la primera coincidencia?

  2. ¿Cómo establecer una variable igual a la salida de un comando en Grub2?

  3. ¿Cómo se interpreta el comodín * como un comando?

  4. ¿Cómo envío un correo electrónico desde la línea de comandos?

  5. ¿Cómo capturar la salida de un comando superior en un archivo en Linux?

Cómo buscar archivos desde la Terminal en Linux

Cómo averiguar la dirección IP pública desde la línea de comandos en Linux

Cómo reiniciar Ubuntu desde la terminal

¿Cómo abrir una interfaz wi-fi desde una línea de comando?

¿Cómo obtengo mi dirección IP desde la línea de comandos?

cómo generar una dirección MAC aleatoria desde la línea de comandos de Linux