¿Cómo puedo mostrar la dirección IP que se muestra en eth0 usando un script?
24
guardar esto en un archivo y luego ejecutar bash <filename>
#!/bin/bash
ifconfig eth0 | grep "inet addr"
siendo más preciso para obtener solo el número que muestra la dirección IP:
#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
Actualización : si esto no funciona para usted, pruebe la otra respuesta
grep "inet"
En aras de proporcionar otra opción, puede utilizar el
ip addr
comando de esta manera para obtener la dirección IP:ip addr show eth0
muestra información sobreeth0
grep "inet\b"
solo muestra la línea que tiene la dirección IPv4 (si desea la dirección IPv6, cámbiela por"inet6\b"
)awk '{print $2}'
imprime en el segundo campo, que tiene la dirección IP / máscara, ejemplo172.20.20.15/25
cut -d/ -f1
solo toma la parte de la dirección IP.En un guion:
fuente
Tomado de /programming//a/14910952/1695680
Sin embargo, eso puede devolver una dirección IP local (127.0.0.1), por lo que puede que tenga que usar y filtrar:
De las páginas de manual de hostname:
fuente
ip addr show label 'enp*'
más, pero me molesta analizar, algo asíip addr show label 'enp*' | grep -oP inet\ \\S+ | cut -d' ' -f2
puede funcionar ... qué bonitoLa respuesta de @ markus-lindberg es mi favorita. Si agrega
-o -4
a las banderas de ip, obtendrá un resultado mucho más fácil de analizar (y coherente):-o
significa--oneline
, que está destinado a ayudar en exactamente este tipo de situaciones. Se-4
agrega para limitar la dirección IPv4, que es lo que implican todas las otras respuestas.fuente
ip
banderas. Usocut
deawk
hechicería en lugar de avanzada :ip -o -4 addr show eth0 scope global | awk '{print $4;}' | cut -d/ -f 1
cut
mucho después de enterarmeawk
, y me gusta minimizar la cantidad de comandos en mis tuberías. Buena sugerencia en cualquier caso.Aquí hay algunos anuncios .....
Awk
La función de división en el comando awk anterior divide la segunda columna en función del delimitador
:
y almacena el valor dividido en una matriz asociativaa
. Entoncesa[2]
tiene el valor de la segunda parte.sed
En sed básico,
\(...\)
llamado grupo de captura que se utiliza para capturar los personajes. Podríamos referir a esos personajes capturados a través de referencias.\([^[:space:]]\+\)
captura cualquier personaje pero no espacio una o más veces.grep
\K
descarta los caracteres previamente coincidentes de la impresión en la final y\S+
coincide con uno o más caracteres no espaciales.Perl
Se
inet addr:
capturan uno o más caracteres no espaciales que están al lado de la cadena y finalmente imprimimos solo los caracteres capturados.fuente
Aquí hay uno bueno, solo usa grep como comando secundario:
ip addr show eth0 | grep -oP 'inet \ K \ S [0-9.] +'
No veo por qué deberías usar más comandos de los necesarios
fuente
Debería usar
ip
(en lugar deifconfig
) ya que es actual, se mantiene y, quizás lo más importante, para fines de secuencias de comandos, produce una salida coherente y analizable. Los siguientes son algunos enfoques similares:Si desea la dirección IPv4 para su interfaz Ethernet
eth0
:Como un guión:
La salida producida anteriormente está en notación CIDR. Si no se desea la notación CIDR, se puede quitar:
Otra opción que en mi humilde opinión es "más elegante" obtiene la dirección IPv4 para cualquier interfaz que se utilice para conectarse al host remoto especificado (8.8.8.8 en este caso). Cortesía de @gatoatigrado en esta respuesta :
Como un guión:
Esto funciona perfectamente bien en un host con una sola interfaz, pero más ventajosamente también funcionará en hosts con múltiples interfaces y / o especificaciones de ruta.
Si bien
ip
sería mi enfoque preferido, ciertamente no es la única forma de desollar a este gato. Aquí hay otro enfoque que utilizahostname
si prefiere algo más fácil / más conciso:O, si desea la dirección IPv6:
Como un guión:
fuente
Sugiero usar una biblioteca de python como netifaces que esté específicamente diseñada para este propósito.
Para obtener la interfaz de red predeterminada que está en uso.
fuente
Este único uso
ip addr
que es un reemplazoifconfig
y seawk
combina con la sustitución (gsub).Dejar de usar demasiados procesos para tareas simples
fuente
Solo una opción más que puede ser útil si no tiene awk (como es el caso en algunos dispositivos integrados):
fuente
ifconfig eth0|grep 'inet '|awk '{print $2}'
fuente
Aquí está para IPv4 :
ip -f inet a|grep -oP "(?<=inet ).+(?=\/)"
Aquí está para IPv4 y dev particular (eth0):
ip -f inet a show eth0|grep -oP "(?<=inet ).+(?=\/)"
para IPv6 :
ip -6 -o a|grep -oP "(?<=inet6 ).+(?=\/)"
fuente
Esto también se puede utilizar con un usuario normal.
fuente
ip addr show | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
cut
dos veces en lugar de una combinación deawk
ycut
para analizar la salida. La próxima vez, primero debe consultar todas las otras respuestas y asegurarse de no publicar una solución duplicada. En este caso aquí, creo que es discutible si es un duplicado o simplemente similar, así que tómalo como una pista general. Gracias.Esta es la forma más corta que pude encontrar:
ip -f inet addr show $1 | grep -Po 'inet \K[\d.]+'
Reemplazar
$1
con su interfaz de red.ip -f inet
le dice a ip que solo devuelva valores para la familia inet (ipv4).grep -Po
le dice a grep que intepere el siguiente valor como perl-regex y que solo imprima los valores coincidentes.La expresión regular
\K[\d.]+
dice "deseche todo hasta este punto (\ K), y combine tantos valores numéricos seguidos por un punto en una fila como sea posible". Por lo tanto, esto solo coincidirá con la dirección IP e ignorará todo lo que esté después, incluida la máscara de subred shortform \ XX.fuente
en estos días con interfaces múltiples (por ejemplo, si usa un acoplador) y la interfaz de nombres por ETH ya no es la norma
Yo uso este comando para extraer la IP / Máscara:
Entonces, independientemente de cuántas interfaces tenga y cualquiera que sea su nombre, GREP solo tomará la primera que tenga la opción MULTICAST.
Utilizo este comando para extraer solo la IP sin la máscara:
Uso estos comandos en diferentes BDS y NIX, nunca falla;)
fuente
ip
, use la-o
opciónEn mi script estoy usando algo así:
No genera ningún proceso.
fuente
Otra forma más (suponiendo que no quieres una
CIDR
dirección y quieresIPv4
):ip
comando que no esdeprecated
fuente