GNU/Linux >> Tutoriales Linux >  >> Linux

Script bash de Linux para extraer la dirección IP

ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"

Para obtener su dirección IP:

echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`

Esto le dará la dirección IP de eth0.

Editar:debido a los cambios de nombre de las interfaces en las versiones recientes de Ubuntu, esto ya no funciona. En su lugar, podría usar esto:

hostname --all-ip-addresses o hostname -I , que hace lo mismo (te da TODAS las direcciones IP del host).


Si el objetivo es encontrar la dirección IP conectado en dirección a Internet, entonces esta debería ser una buena solución.

Edición 2021:Se agregaron versiones "sed" y "grep" y nuevas versiones "awk" (algunas son gnu)

Para encontrar qué sumadores de IP se usan conectados a Internet, podemos usar el ip route dominio. Con la versión más nueva de Linux, obtiene más información con un resultado típico como este:

ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
    cache

para obtener IP necesitas encontrar la IP después de src , usando awk , sed o grep

ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1'

ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed  -nE '1{s/.*?src (\S+) .*/\1/;p}'

ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+'
10.36.15.150

y si te gusta la interfaz nombre usando awk , sed o grep

ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1'

ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed  -nE '1{s/.*?dev (\S+) .*/\1/;p}'

ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+'
ens192

ip route no abre ninguna conexión, solo muestra la ruta necesaria para llegar a 8.8.8.8 . 8.8.8.8 es el DNS de Google.

Si desea almacenar esto en una variable, haga lo siguiente:

my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')

my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')

Por qué otra solución puede fallar:

ifconfig eth0

  • Si la interfaz que tienes tiene otro nombre (eno1, wifi, venet0 etc)
  • Si tiene más de una interfaz
  • La dirección de conexión IP no es la primera en una lista de más de un IF

Hostname -I

  • Puede obtener solo el 127.0.1.1
  • No funciona en todos los sistemas.
  • Proporcione todas las IP, no solo la que está conectada a Internet. -I, --all-ip-addresses todas las direcciones del host

Si desea obtener una lista separada por espacios de sus direcciones IP, puede usar el hostname comando con el --all-ip-addresses (breve -I ) bandera

hostname -I

como se describe aquí:Poner la dirección IP en la variable bash. ¿Hay una mejor manera?


Linux
  1. Analizando el historial de Bash en Linux

  2. Cambiar la contraseña del sistema Linux en el script bash

  3. Servicio del sistema operativo Linux 'scsi_reserve'

  4. Bash script:mal intérprete

  5. ejecutar script php (función php) en linux bash

35 ejemplos de secuencias de comandos Bash

Cómo encontrar la dirección IP en Linux

Cómo ejecutar un script Bash

Cómo cambiar la dirección IP en Linux

Extraiga el archivo tar.gz en Linux

Shell/Bash Script para encontrar números primos en Linux