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?