Ho cambiato il mio nome host, perché il mio prompt di bash PS1 è rimasto invariato


21

Ho cambiato il mio nome host modificando / etc / hostname e posso vedere il nuovo nome host usando i comandi hostnamee hostname -F.

Ma il prompt della shell mostra ancora il vecchio nome host.

A proposito, questo è Ubuntu 11.0.4. Il prompt è impostato nel mio .bashrcche non ho modificato. Disconnettersi e persino riavviare non ha alcun effetto.

Sezione pertinente di 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 non è impostato mentre eseguo l'accesso ...)

Suppongo che il nome host sia preso dal carattere speciale \ h.

Ecco l'impostazione PS1 come riportato nella shell:

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

Ed ecco cosa mostra PS1:

username@oldhostname:~$ 

Ho ripetuto il processo usando il comando esatto nella risposta di Warren. Si scopre che il nome host funziona fino al riavvio ma poi viene perso, anche se /etc/hostnamecontiene il nuovo nome host.


Cosa echo $PS1mostra?
Keith,

@Keith - Ho aggiornato la domanda per mostrare PS1.
Dizzley,

Grazie per l'aggiornamento, che mi ha buttato via perché non ricordavo che dhcp potesse farlo perché non l'ho mai lasciato. Grazie anche per essere tornato e rimanere in cima alla domanda e (eventualmente) aggiungere la tua modifica come risposta, benvenuto su unix.SE!
Caleb,

Risposte:


24

Sto rispondendo alla mia domanda, alla luce delle precedenti risposte di Keith e Warren e della risoluzione effettiva. Il problema percepito era "Ho cambiato il mio nome host, perché il mio prompt di bash PS1 è invariato?" Il vero problema era "Perché il mio sistema è tornato al suo vecchio nome host al riavvio?"

La risposta in questo caso particolare è stata: DHCP è configurato per sovrascrivere le impostazioni locali.

Un modo efficace per modificare il nome host

Quanto segue è applicabile a Ubuntu, ymmv .

  1. Cambia il nome host persistente modificando il file /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Per modificare il nome host per il sistema in esecuzione, utilizzare il comando hostname . Senza il passaggio 1, questo verrà ripristinato al riavvio. Ha senso utilizzare il valore appena impostato:

    sudo hostname -F /etc/hostname

    o suo equivalente:

    sudo hostname `cat /etc/hostname`
  3. Impostare il nome di dominio completo (FQDN) in /etc/hosts.

    Estratto:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Controllare se la macchina esegue un client DHCP. Oltre all'indirizzo IP, un server DHCP può avere la precedenza su impostazioni come nome host e risoluzione DNS. Un servizio di hosting "cloud" potrebbe eseguire questa operazione in modo che l'immagine di una macchina su disco possa essere riutilizzata più volte senza modificare i file di configurazione.

    Se esiste, modifica il file di configurazione del client DHCP /etc/default/dhcpcdper commentare la SET_HOSTNAMEdirettiva:

    #SET_HOSTNAME='yes'
  5. Quando possibile, riavviare il sistema e verificare che il nome sia cambiato con:

    hostname

Il passaggio 4 è stato una novità per me e mi ha sorpreso. Ho pensato che sarebbe stato utile documentare l'intero processo in questa risposta. Questo passaggio è per gentile concessione di (Linode) le istruzioni del mio servizio di hosting che avrei davvero dovuto leggere correttamente.


Se questa risposta sembra appropriata, un apprezzamento da parte degli altri sarebbe apprezzato in quanto non posso votare per la mia risposta.
Dizzley,

2

Il file /etc/hostnamecontiene la copia persistente del nome host e viene utilizzato durante l'avvio per impostare la copia di runtime. Per modificare la copia di runtime senza riavviare, dire:

$ sudo hostname `cat /etc/hostname`

Oppure passa semplicemente il nuovo nome host come parametro al hostname(1)comando.


Il mio problema è in persistenza. Ho usato e verificato il nome host di runtime (vedi domanda). Inoltre, "sudo hostname -F / etc / hostname" è una forma alternativa del comando (man hostname). Tuttavia, ho fatto come mi hai suggerito. Il nome host viene perso al riavvio. :( Ho anche inserito l'FQDN in /etc/host.conf e /etc/host.conf è impostato per utilizzare solo il bind. Sono ancora in perdita.
Dizzley,

Ho aggiornato la Q con una risoluzione e risponderò alla mia domanda tra poco. Grazie Warren / Keith.
Dizzley,

Dovrebbe essere stato 'Ho anche inserito l'FQDN in / etc / hosts.'
Dizzley,

-1

Vedo che hai /hnel tuo PS1e poi menziono FQDN, ora, potresti pubblicare il tuo vecchio e un nuovo nome host che stai cercando di usare?

  • /h mostra il nome host fino al primo '.'
  • /H mostra il nome di dominio completo completo

Provaci


Ciao njekto NB è \ h not / h. Mi piace mantenere privati ​​i miei nomi host quando si tratta di un server di produzione, quindi "oldname" e "newname" (senza punti). Sono un esperto di Unix ma questo mi ha lasciato perplesso - non ho mai visto dhcpcd essere usato in questo modo. Sembrava che il prompt di PS1 fosse sbagliato, ma il vero problema era / etc / hostname che veniva sovrascritto da dhcpcd all'avvio. Dhcpcd viene utilizzato perché l'immagine della mia macchina può essere ridistribuita o duplicata su un'altra impostazione dell'indirizzo IP in modo che il mio hoster, Linode, generi valori predefiniti tramite DHCP, quindi ogni istanza della mia immagine Ubunto è unica. Sono un principiante nel cloud, quindi è stato divertente.
Dizzley,

-1
  • Capitalizza hnel tuo PS1:

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.