J'ai changé mon nom d'hôte, pourquoi mon invite bash PS1 est-elle inchangée

21

J'ai changé mon nom d'hôte en modifiant / etc / hostname et je peux voir le nouveau nom d'hôte à l'aide des commandes hostnameet hostname -F.

Mais l'invite du shell affiche toujours l'ancien nom d'hôte.

C'est d'ailleurs Ubuntu 11.0.4. L'invite est définie dans mon .bashrcque je n'ai pas modifié. La déconnexion et même le redémarrage n'a aucun effet.

Section pertinente de l'Ubuntu standard .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 n'est pas défini lors de ma connexion ...)

Je suppose que le nom d'hôte est repris par le caractère spécial \ h.

Voici le paramètre PS1 tel que rapporté dans le shell:

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

Et voici ce que montre la PS1:

username@oldhostname:~$ 

J'ai répété le processus en utilisant la commande exacte dans la réponse de Warren. Il s'avère que le nom d'hôte fonctionne jusqu'au redémarrage, mais il est ensuite perdu, même s'il /etc/hostnamecontient le nouveau nom d'hôte.

Dizzley
la source
Que echo $PS1montre-t-on?
Keith
@Keith - J'ai mis à jour la question pour afficher PS1.
Dizzley
Merci pour la mise à jour, cela m'a bouleversé parce que je ne me souvenais pas que DHCP pouvait le faire parce que je ne l'ai jamais laissé faire. Merci également d'être revenu et de rester au top de la question et (éventuellement) d'ajouter votre modification en tant que réponse, bienvenue sur unix.SE!
Caleb

Réponses:

24

Je réponds à ma propre question, à la lumière des réponses précédentes de Keith et Warren et de la résolution réelle. Le problème perçu était "J'ai changé mon nom d'hôte, pourquoi mon invite bash PS1 est-elle inchangée?" Le problème réel était "Pourquoi mon système est-il revenu à son ancien nom d'hôte au redémarrage?"

La réponse dans ce cas particulier était: DHCP est configuré pour remplacer les paramètres locaux.

Un moyen efficace de changer le nom d'hôte

Ce qui suit s'applique à Ubuntu, ymmv .

  1. Modifiez le nom d'hôte persistant en modifiant le fichier /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Pour modifier le nom d'hôte du système en cours d'exécution, utilisez la commande hostname . Sans l'étape 1, cela serait réinitialisé au redémarrage. Il est logique d'utiliser la valeur que vous venez de définir:

    sudo hostname -F /etc/hostname

    ou son équivalent:

    sudo hostname `cat /etc/hostname`
  3. Définissez le nom de domaine complet (FQDN) dans /etc/hosts.

    Extrait:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Vérifiez si la machine exécute un client DHCP. En plus de l'adresse IP, un serveur DHCP peut très bien remplacer les paramètres tels que le nom d'hôte et la résolution DNS. Un service d'hébergement «cloud» peut le faire afin que l'image d'une machine sur disque puisse être réutilisée plusieurs fois sans modifier les fichiers de configuration.

    S'il existe, modifiez le fichier de configuration du client DHCP /etc/default/dhcpcdpour mettre en commentaire la SET_HOSTNAMEdirective:

    #SET_HOSTNAME='yes'
  5. Si possible, redémarrez le système et vérifiez que le nom a changé avec:

    hostname

L'étape 4 était une nouvelle pour moi et m'a rattrapé. J'ai pensé qu'il serait utile de documenter l'ensemble du processus dans cette réponse. Cette étape est une gracieuseté de (Linode) les instructions de mon service d'hébergement que j'aurais vraiment dû lire correctement.

Dizzley
la source
Si cette réponse semble appropriée, un vote positif des autres serait apprécié car je ne peux pas voter pour ma propre réponse.
Dizzley
2

Le fichier /etc/hostnamecontient la copie persistante du nom d'hôte et est utilisé lors du démarrage pour définir la copie d'exécution. Pour modifier la copie d'exécution sans redémarrer, dites:

$ sudo hostname `cat /etc/hostname`

Ou passez simplement le nouveau nom d'hôte comme paramètre à la hostname(1)commande.

Warren Young
la source
Mon problème est dans la persistance. J'ai utilisé et vérifié le nom d'hôte d'exécution (voir la question). De plus, "sudo hostname -F / etc / hostname" est une forme alternative de la commande (man hostname). Cependant, j'ai fait comme vous l'avez suggéré. Le nom d'hôte est perdu au redémarrage. :( J'ai également mis le FQDN dans /etc/host.conf et /etc/host.conf est configuré pour n'utiliser que bind. Je suis toujours perdu.
Dizzley
J'ai mis à jour le Q avec une résolution et je répondrai à ma propre question dans peu de temps. Merci Warren / Keith.
Dizzley
Cela aurait dû être «J'ai également mis le FQDN dans / etc / hosts».
Dizzley
-1

Je vois que vous avez /hdans votre PS1, puis mentionnez le nom de domaine complet, maintenant, pourriez-vous publier votre ancien et un nouveau nom d'hôte que vous essayez d'utiliser?

  • /h affiche le nom d'hôte jusqu'au premier '.'
  • /H affiche le nom de domaine complet

Essaie

njekto
la source
Salut njekto. NB c'est \ h pas / h. J'aime garder mes noms d'hôtes privés quand c'est un serveur de production donc "oldname" et "newname" (pas de points). Je suis un vieux coup de main chez Unix, mais cela m'a dérouté - je n'ai jamais vu dhcpcd utilisé comme ça. Il semblait que l'invite PS1 était erronée, mais le vrai problème était / etc / hostname est remplacé par dhcpcd au démarrage. Dhcpcd est utilisé parce que l'image de ma machine peut être redéployée ou dupliquée sur une autre configuration d'adresse IP afin que mon hébergeur, Linode, génère des valeurs par défaut en utilisant DHCP afin que chaque instance de mon image Ubunto soit unique. Je suis un débutant dans le cloud, donc ça a été plutôt amusant.
Dizzley
-1
  • Capitalisez le hdans votre PS1:

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