Я изменил свое имя хоста, почему мое приглашение bash PS1 не изменилось

21

Я изменил свое имя хоста , отредактировав / и т.д. / имя хоста и может видеть новое имя хоста , с помощью hostnameи hostname -Fкоманды.

Но приглашение оболочки все еще показывает старое имя хоста.

Это Ubuntu 11.0.4, кстати. Приглашение установлено в моем, .bashrcкоторый я не редактировал. Выход из системы и даже перезагрузка не имеет никакого эффекта.

Соответствующий раздел стандартного Ubuntu .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 сбрасывается при входе в систему ...)

Я думаю, что имя хоста выбирается специальным символом \ h.

Вот настройка PS1, как указано в оболочке:

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

И вот что показывает PS1:

username@oldhostname:~$ 

Я повторил процесс, используя точную команду в ответе Уоррена. Оказывается, что имя хоста работает до перезагрузки, но затем оно теряется, хотя и /etc/hostnameсодержит новое имя хоста.

Dizzley
источник
Что echo $PS1показывает?
Кит
@Keith - я обновил вопрос, чтобы показать PS1.
Диззли
Спасибо за обновление, которое сбило меня с толку, потому что я не помнил, что dhcp мог сделать это, потому что я никогда не позволял это. Спасибо также за то, что вы вернулись и оставались в курсе вопроса и (в конечном итоге) добавили ваши изменения в качестве ответа, добро пожаловать в unix.SE!
Калеб

Ответы:

24

Я отвечаю на свой вопрос в свете предыдущих ответов Кейта и Уоррена и фактического решения. Предполагаемая проблема заключалась в том, что «я изменил свое имя хоста, почему моя подсказка bash PS1 не изменилась?» Фактическая проблема была: «Почему моя система вернулась к своему старому имени хоста при перезагрузке?»

Ответ в данном конкретном случае был следующим: DHCP настроен на переопределение локальных настроек.

Эффективный способ изменить имя хоста

Следующее применимо к Ubuntu, ymmv .

  1. Измените постоянное имя хоста, отредактировав файл /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Чтобы изменить имя хоста для работающей системы, используйте команду hostname . Без шага 1 это будет сброшено при перезагрузке. Имеет смысл использовать значение, которое вы только что установили:

    sudo hostname -F /etc/hostname

    или его эквивалент:

    sudo hostname `cat /etc/hostname`
  3. Установите полное доменное имя (FQDN) в /etc/hosts.

    Выдержка:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Проверьте, работает ли на компьютере клиент DHCP. В дополнение к IP-адресу DHCP-сервер может также переопределять такие параметры, как имя хоста и разрешение DNS. Это может сделать «облачный» хостинг, поэтому образ машины на диске можно использовать несколько раз без редактирования файлов конфигурации.

    Если он существует, отредактируйте файл конфигурации клиента DHCP, /etc/default/dhcpcdчтобы закомментировать SET_HOSTNAMEдирективу:

    #SET_HOSTNAME='yes'
  5. По возможности перезагрузите систему и проверьте, что имя изменилось с помощью:

    hostname

Шаг 4 был новостью для меня и поймал меня. Я подумал, что было бы полезно документировать весь процесс в этом ответе. Этот шаг любезно предоставлен (Linode) инструкциям моей хостинг-службы, которые я действительно должен был прочитать правильно.

Dizzley
источник
Если этот ответ кажется уместным, приветствуем других, так как я не могу голосовать за свой ответ.
Диззли
2

Файл /etc/hostnameсодержит постоянную копию имени хоста и используется во время загрузки для установки копии во время выполнения. Чтобы изменить копию во время выполнения без перезагрузки, скажите:

$ sudo hostname `cat /etc/hostname`

Или просто передайте новое имя хоста в качестве параметра в hostname(1)команду.

Уоррен Янг
источник
Моя проблема в постоянстве. Я использовал и проверил имя хоста среды выполнения (см. Вопрос). Также «sudo hostname -F / etc / hostname» является альтернативной формой команды (man hostname). Тем не менее, я сделал, как вы предложили. Имя хоста теряется при перезагрузке. :( Я также поместил полное доменное имя в /etc/host.conf, и /etc/host.conf настроен на использование только связывания. Я все еще в растерянности.
Dizzley,
Я обновил Q с разрешением и вскоре отвечу на свой вопрос. Спасибо Уоррен / Кит.
Диззли
Это должно было быть «Я также поместил полное доменное имя в / etc / hosts».
Диззли
-1

Я вижу , у вас есть /hв вашем предложении PS1и затем полное доменное имя, теперь, не могли бы вы опубликовать ваш старый и новый хост вы пытаетесь использовать?

  • /h показывает имя хоста до первого '.'
  • /H показывает полное FQDN

попробуй

njekto
источник
Привет njekto. NB это \ ч нет / ч. Мне нравится сохранять свои имена хостов закрытыми, когда это рабочий сервер, поэтому «oldname» и «newname» (без точек). Я старый человек в Unix, но это поставило меня в тупик - я никогда не видел, чтобы dhcpcd использовался таким образом. Похоже, приглашение PS1 было неверным, но реальная проблема была в том, что / etc / hostname перезаписывается dhcpcd при загрузке. Dhcpcd используется потому, что образ моего компьютера может быть повторно развернут или скопирован на другой IP-адрес, поэтому мой хостер, Linode, генерирует значения по умолчанию с использованием DHCP, чтобы каждый экземпляр моего образа Ubunto был уникальным. Я новичок в облаке, так что это было забавно.
Диззли
-1
  • Используйте hв своем PS1:

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
Мооса
источник