2011-02-28 17 views
11

Pregunta: ¿Existe una manera fácil de agregar DHCP la dirección IP y el nombre de host de una máquina linux en/etc/hosts al inicio del sistema automáticamente?Agregando nombre de host a/etc/hosts en Linux

Antecedentes: Mi máquina Linux tiene un nombre de host en/etc/hostname y no se resolverá nada cuando haga ping. Agregué manualmente mi nombre de host y dirección de IP en/etc/hosts para que funcione uno de mis programas Java relacionados con la red.

Gracias,

+1

Si quieres resolución de DNS , eso suele ser parte de la configuración del servidor DHCP: transferir la información al servidor DNS. –

+0

No es una verdadera resoultion DNS. Quiero usar un nombre de host y podré hacer ping desde la misma máquina usando ese nombre de host (no desde fuera de esa máquina). Es por eso que estoy confiando en/etc/hosts. – M99

Respuesta

5

dhcpcd tiene una opción de -c/--script para ejecutar un script externo en cualquier momento se configura o nos lleva a una interfaz. Puede usar esto para actualizar manualmente el archivo de hosts con el nombre de host configurado.

+0

Tengo un proceso 'dhcpcpclient3'. ¿Es esto lo mismo que dhcpd? De ser así, ¿dónde cambio la configuración para especificar un script? Gracias. – M99

+0

'/ etc/dhcp3' tiene todos sus archivos de configuración. La opción -c es para cuando la invocas directamente desde la línea de comando. Para los cambios basados ​​en el archivo de configuración, sería la opción 'script' en el dhclient.conf principal –

+0

Ahora la sección 'script' en /etc/dhcp3/dhclient.conf está comentada. Pasaré mi propio script allí para actualizar/etc/hosts. ¿Hay alguna relación entre este 'script' y/sbin/dhclient-script? ¿La entrada 'script' en /etc/dhcp3/dhclient.conf necesita seguir alguna convención especial o es simplemente cualquier script de shell? Gracias. – M99

1

Uso avahi (que debe estar en los repositorios de distribuciones), entonces usted puede

$ ping youhostname.local 
7

En Ubuntu, añadir un archivo ejecutable en el directorio /etc/network/if-up.d. Los archivos en este directorio se ejecutan después de que el administrador de red configura una interfaz de red.

Usted puede adaptar el script siguiente:

#!/bin/sh 

set -e 

if [ "$IFACE" = lo ]; then 
    exit 0 
fi 

myHostName=`hostname` 

# Remove current line with hostname at the end of line ($ means end of line) 
sed -i '/'$myHostName'$/ d' /etc/hosts 

ipaddr=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}') 
echo "$ipaddr $myHostName" >>/etc/hosts 
+0

Tengo una pregunta: ¿funcionará para qué versión de Linux podemos crear secuencias de comandos de varias versiones para cada sistema Linux/Mac/Windows? Es mejor idea hacer para Cross Platform. –

+0

Me las arreglé para simplificar la afirmación ipaddr utilizando el siguiente un-liner: 'ifconfig | awk -F "+ |:" '/ inet addr/&& $ 4! = "127.0.0.1" {print $ 4}' ' – Yaron

1

Tomé lo hizo @Markus y ponerlo en un guión normal. Esto funciona en mi caja de Fedora 20:

#!/bin/sh 

MYHOST=firtree 

echo "before:" 
cat /etc/hosts 

# Remove current line with hostname at the end of line ($ means end of line) 
sed -i '/'$MYHOST'$/ d' /etc/hosts 

echo "after remove: " 
cat /etc/hosts 

IPADDR=$(ifconfig | awk -F" +|:" '/inet addr/ && $4 != "127.0.0.1" {print $4}') 
echo "$IPADDR $MYHOST" >>/etc/hosts 

echo "ip: " $IPADDR 
echo "final: " 
cat /etc/hosts 

Esto tiene que ser ejecutado como root, y probablemente debería ir en una carpeta init.d.

+0

No es bueno, desasociar 127 puede soltar la dirección real si contiene 127 (por ejemplo 192.168.4.127) , mejor reformule o use este one-liner: 'ifconfig | awk -F "+ |:" '/ inet addr/&& $ 4! = "127.0.0.1" {print $ 4}' ' – Yaron

+1

Buena captura. Actualizado. ¡Gracias! –

0

De

ipaddr=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}’) 
host=`hostname` 
fhost=`hostname -f` 

echo "$ipaddr $fhost $host" >> /etc/hosts 

cat /etc/hosts 
0

Yo personalmente uso este script para configurar mi nombre de host (existente) + IP dinámica a /etc/hosts archivo: cuanto

#!/bin/bash 
ipaddr=$(/sbin/ifconfig eth0| grep 'inet addr' | cut -d: -f2 | awk '{print $1}') 
hn=$(hostname) 
hnd=$(hostname -f) 
sed -i '2s/.*/'$ipaddr' '$hnd' '$hn'/' /etc/hosts 

cordiales,

Cuestiones relacionadas