Cambié mi nombre de host, ¿por qué mi bash PS1 no cambia?

21

Cambié mi nombre de host editando / etc / hostname y puedo ver el nuevo nombre de host usando los comandos hostnamey hostname -F.

Pero el indicador de shell aún muestra el antiguo nombre de host.

Esto es Ubuntu 11.0.4 por cierto. El indicador se establece en mi .bashrcque no he editado. Cerrar sesión e incluso reiniciar no tiene ningún efecto.

Sección relevante del Ubuntu estándar .bashrc:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

($ debian_chroot no está configurado cuando inicio sesión ...)

Supongo que el nombre de host lo recoge el carácter especial \ h.

Aquí está la configuración de PS1 como se informa en el shell:

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Y esto es lo que muestra PS1:

username@oldhostname:~$ 

Repetí el proceso usando el comando exacto en la respuesta de Warren. Resulta que el nombre de host funciona hasta que se reinicia, pero luego se pierde, aunque /etc/hostnamecontiene el nuevo nombre de host.

Dizzley
fuente
¿Qué echo $PS1muestra?
Keith
@Keith: actualicé la pregunta para mostrar PS1.
Dizzley
Gracias por la actualización, eso me sorprendió porque no recordaba que dhcp pudiera hacerlo porque nunca lo dejé. Gracias también por volver y mantenerte al tanto de la pregunta y (eventualmente) agregar tu edición como respuesta, ¡bienvenido a unix.SE!
Caleb

Respuestas:

24

Estoy respondiendo mi propia pregunta, a la luz de las respuestas anteriores de Keith y Warren, y la resolución real. El problema percibido fue "Cambié mi nombre de host, ¿por qué no se modificó mi mensaje bash PS1? El problema real era "¿Por qué mi sistema volvió a su antiguo nombre de host al reiniciar?"

La respuesta en este caso particular fue: DHCP está configurado para anular la configuración local.

Una forma efectiva de cambiar el nombre de host

Lo siguiente es aplicable a Ubuntu, ymmv .

  1. Cambie el nombre de host persistente editando el archivo /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Para cambiar el nombre de host para el sistema en ejecución, use el comando hostname . Sin el Paso 1, esto se restablecería al reiniciar. Tiene sentido usar el valor que acaba de establecer:

    sudo hostname -F /etc/hostname

    o su equivalente:

    sudo hostname `cat /etc/hostname`
  3. Establezca el nombre de dominio completo (FQDN) en /etc/hosts.

    Extracto:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Compruebe si la máquina está ejecutando un cliente DHCP. Además de la dirección IP, un servidor DHCP puede anular configuraciones como el nombre de host y la resolución DNS. Un servicio de alojamiento "en la nube" puede hacer esto para que la imagen de una máquina en el disco se pueda reutilizar varias veces sin editar archivos de configuración.

    Si existe, edite el archivo de configuración del cliente DHCP /etc/default/dhcpcdpara comentar la SET_HOSTNAMEdirectiva:

    #SET_HOSTNAME='yes'
  5. Cuando sea posible, reinicie el sistema y verifique que el nombre haya cambiado con:

    hostname

El paso 4 fue nuevo para mí y me sorprendió. Pensé que sería útil documentar todo el proceso en esta respuesta. Ese paso es cortesía de (Linode) las instrucciones de mi servicio de alojamiento que realmente debería haber leído correctamente.

Dizzley
fuente
Si esta respuesta parece apropiada, se agradecería un voto positivo de los demás, ya que no puedo votar por mi propia respuesta.
Dizzley
2

El archivo /etc/hostnamecontiene la copia persistente del nombre de host y se usa durante el arranque para configurar la copia en tiempo de ejecución. Para cambiar la copia en tiempo de ejecución sin reiniciar, diga:

$ sudo hostname `cat /etc/hostname`

O simplemente pase el nuevo nombre de host como parámetro al hostname(1)comando.

Warren Young
fuente
Mi problema está en la persistencia. Usé y verifiqué el nombre de host en tiempo de ejecución (ver pregunta). Además, "sudo hostname -F / etc / hostname" es una forma alternativa del comando (man hostname). Sin embargo, hice lo que sugeriste. El nombre de host se pierde al reiniciar. :( También puse el FQDN en /etc/host.conf y /etc/host.conf está configurado para usar solo bind. Todavía estoy perdido.
Dizzley
He actualizado la Q con una resolución y responderé a mi propia pregunta en un momento. Gracias Warren / Keith.
Dizzley
Eso debería haber sido 'También he puesto el FQDN en / etc / hosts'.
Dizzley
-1

Veo que tiene /hen su PS1y luego menciono FQDN, ahora, ¿podría publicar su antiguo y nuevo nombre de host que está tratando de usar?

  • /h muestra el nombre de host hasta el primer '.'
  • /H muestra el FQDN completo

darle una oportunidad

njekto
fuente
Hola njekto NB es \ h no / h. Me gusta mantener privados mis nombres de host cuando se trata de un servidor de producción, por lo que "oldname" y "newname" (sin puntos). Soy un experto en Unix, pero esto me dejó perplejo: nunca vi que dhcpcd se usara así. Parecía que el indicador de PS1 estaba equivocado, pero el problema real era / etc / hostname es sobrescrito por dhcpcd en el arranque. Dhcpcd se usa porque la imagen de mi máquina se puede volver a implementar o duplicar en otra configuración de dirección IP, por lo que mi proveedor de alojamiento, Linode, genera valores predeterminados utilizando DHCP, por lo que cada instancia de mi imagen de Ubunto es única. Soy un principiante en la nube, así que esto ha sido divertido.
Dizzley
-1
  • Capitaliza el hen tu PS1:

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
moosa
fuente