Mudei meu nome de host. Por que meu prompt do bash PS1 é inalterado?

21

Alterei meu nome de host editando / etc / hostname e posso ver o novo nome de host usando os comandos hostnamee hostname -F.

Mas o prompt do shell ainda está mostrando o nome do host antigo.

A propósito, este é o Ubuntu 11.0.4. O prompt é definido no meu .bashrcque eu não editei. Sair e até reiniciar não tem efeito.

Seção relevante do Ubuntu padrão .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ão está definido quando eu faço o login ...)

Eu acho que o nome do host é escolhido pelo caractere especial \ h.

Aqui está a configuração PS1, conforme relatado no shell:

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

E aqui está o que o PS1 mostra:

username@oldhostname:~$ 

Repeti o processo usando o comando exato na resposta de Warren. Acontece que o nome do host funciona até a reinicialização, mas é perdido, mesmo que /etc/hostnamecontenha o novo nome do host.

Dizzley
fonte
O que echo $PS1mostra?
Keith
@ Keith - Atualizei a pergunta para mostrar o PS1.
Dizzley
Obrigado pela atualização, isso me assustou porque eu não lembrava que o dhcp poderia fazer isso porque eu nunca deixei. Obrigado também por voltar e ficar no topo da pergunta e (eventualmente) adicionar sua edição como resposta, bem-vindo ao unix.SE!
Caleb

Respostas:

24

Estou respondendo minha própria pergunta, à luz das respostas anteriores de Keith e Warren, e a resolução real. O problema percebido foi "Eu mudei meu nome de host, por que meu prompt do PS1 do bash não mudou?" O problema real era "Por que meu sistema voltou ao nome do host antigo na reinicialização?"

A resposta nesse caso específico foi: DHCP está configurado para substituir as configurações locais.

Uma maneira eficaz de alterar o nome do host

O seguinte é aplicável ao Ubuntu, ymmv .

  1. Altere o nome do host persistente editando o arquivo /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Para alterar o nome do host para o sistema em execução, use o comando hostname . Sem a Etapa 1, isso seria redefinido na reinicialização. Faz sentido usar o valor que você acabou de definir:

    sudo hostname -F /etc/hostname

    ou equivalente:

    sudo hostname `cat /etc/hostname`
  3. Defina o nome de domínio totalmente qualificado (FQDN) em /etc/hosts.

    Excerto:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Verifique se a máquina está executando um cliente DHCP. Além do endereço IP, um servidor DHCP pode substituir configurações como nome de host e resolução de DNS. Um serviço de hospedagem em "nuvem" pode fazer isso para que a imagem de uma máquina no disco possa ser reutilizada várias vezes sem editar os arquivos de configuração.

    Se existir, edite o arquivo de configuração do cliente DHCP /etc/default/dhcpcdpara comentar a SET_HOSTNAMEdiretiva:

    #SET_HOSTNAME='yes'
  5. Quando possível, reinicie o sistema e verifique se o nome mudou com:

    hostname

O passo 4 foi uma novidade para mim e me pegou de surpresa. Eu pensei que seria útil documentar todo o processo nesta resposta. Essa etapa é cortesia das instruções do meu serviço de hospedagem (Linode) , que eu realmente deveria ter lido corretamente.

Dizzley
fonte
Se essa resposta parecer apropriada, um voto positivo de outros seria apreciado, pois não posso votar em minha própria resposta.
Dizzley
2

O arquivo /etc/hostnamecontém a cópia persistente do nome do host e é usado durante a inicialização para definir a cópia em tempo de execução. Para alterar a cópia em tempo de execução sem reiniciar, diga:

$ sudo hostname `cat /etc/hostname`

Ou apenas passe o novo nome do host como parâmetro para o hostname(1)comando.

Warren Young
fonte
Meu problema está em persistência. Eu usei e verifiquei o nome do host em tempo de execução (consulte a pergunta). Além disso, "sudo hostname -F / etc / hostname" é uma forma alternativa do comando (man hostname). No entanto, fiz como você sugeriu. O nome do host é perdido na reinicialização. :( Eu também colocar o FQDN em /etc/host.conf e /etc/host.conf é definido somente para vincular o uso Eu ainda estou em uma perda..
Dizzley
Atualizei o Q com uma resolução e responderá à minha própria pergunta daqui a pouco. Obrigado Warren / Keith.
Dizzley
Isso deveria ter sido 'Eu também coloquei o FQDN em / etc / hosts.'
Dizzley
-1

Vejo que você tem /hno seu PS1e, em seguida, mencione o FQDN, agora, você poderia postar seu antigo e um novo nome de host que você está tentando usar?

  • /h mostra o nome do host até o primeiro '.'
  • /H mostra o FQDN completo

De uma chance

njekto
fonte
Oi njekto. NB é \ h não / h. Eu gosto de manter meus nomes de host privados quando é um servidor de produção para "oldname" e "newname" (sem pontos). Eu sou veterano no Unix, mas isso me deixou perplexo - nunca vi o dhcpcd sendo usado assim. Parecia que o prompt do PS1 estava errado, mas o problema real era / etc / hostname, sobrescrito pelo dhcpcd na inicialização. Dhcpcd é usado porque a imagem da minha máquina pode ser reimplantada ou duplicada em outra configuração de endereço IP, para que o meu hoster, Linode, gere valores padrão usando DHCP, para que cada instância da minha imagem do Ubunto seja única. Eu sou iniciante na nuvem, então isso tem sido divertido.
Dizzley
-1
  • Capitalize o hseu PS1:

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