Как изменить имя хоста на сервере ubuntu 18.04 [duplicate]

Я хочу изменить имя хоста ОС, но я не хочу перезапускать.

Я отредактировал /etc/hostname, но для его реализации требуется перезапуск. Как этого избежать?

463
задан 28 August 2014 в 01:08

22 ответа

Это легко. Просто нажмите значок Gear (расположенный в правом верхнем углу экрана), откройте экран «Об этом компьютере» (расположенный на значке Gear) и отредактируйте «Имя устройства».

Или, в терминале, используйте следующую команду:

sudo hostname your-new-name

Это приведет к тому, что имя хоста будет присвоено вашему новому имени до перезапуска. См. [F5] и Как изменить имя компьютера? для дополнительной информации. Не используйте _ для вашего имени.

Примечание

После перезапуска будут использоваться изменения в man hostname , поэтому (как вы сказали в вопросе), вы все равно должны использовать

sudo -H gedit /etc/hostname

(или какой-либо другой редактор), чтобы файл содержал имя хоста.

Чтобы проверить правильность настройки файла, запустите :

sudo service hostname start

Вы также должны отредактировать /etc/hosts и изменить строку, которая гласит:

127.0.1.1 your-old-hostname

, чтобы теперь оно содержало ваше новое имя хоста. (Это необходимо, иначе многие команды перестанут функционировать.)

574
ответ дан 17 July 2018 в 17:03

Это легко. Просто нажмите значок Gear (расположенный в правом верхнем углу экрана), откройте экран «Об этом компьютере» (расположенный на значке Gear) и отредактируйте «Имя устройства».

Или, в терминале, используйте следующую команду:

sudo hostname your-new-name

Это приведет к тому, что имя хоста будет присвоено вашему новому имени до перезапуска. См. [F5] и Как изменить имя компьютера? для дополнительной информации. Не используйте _ для вашего имени.

Примечание

После перезапуска будут использоваться изменения в man hostname , поэтому (как вы сказали в вопросе), вы все равно должны использовать

sudo -H gedit /etc/hostname

(или какой-либо другой редактор), чтобы файл содержал имя хоста.

Чтобы проверить правильность настройки файла, запустите :

sudo service hostname start

Вы также должны отредактировать /etc/hosts и изменить строку, которая гласит:

127.0.1.1 your-old-hostname

, чтобы теперь оно содержало ваше новое имя хоста. (Это необходимо, иначе многие команды перестанут функционировать.)

576
ответ дан 23 July 2018 в 17:54
Замените содержимое /etc/hostname на нужное имя хоста (вы можете редактировать с помощью sudo nano /etc/hostname). В /etc/hosts замените запись рядом с 127.0.1.1 на нужное имя хоста (вы можете редактировать с помощью sudo nano /etc/hosts). Выполнить sudo service hostname restart; sudo service networking restart
4
ответ дан 17 July 2018 в 17:03

Ubuntu 16.04

Решение основано на ответе от DigitalOcean Comunity.

Редактировать файл hosts.

$ sudo nano /etc/hosts

Заменить hosts с новым.

127.0.0.1 localhost newname

Установите новое имя хоста.

$ sudo hostnamectl set-hostname newname

1
ответ дан 17 July 2018 в 17:03

Классический ответ на вопрос оригинального плаката заключается в том, что после того, как вы отредактировали /etc/hostname, вы примените его без перезапуска, запустив имя хоста (1) с параметром -F (--file) в качестве пользователя root: [ ! d0] sudo hostname -F /etc/hostname

Обработка hostname (1) с /etc/hostname и указанной программой была одинаковой в Debian и ее производных уже более двадцати лет, а пакет, предоставляющий ее был отмечен как существенный, так и требуемый, и IIRC сценарии инициализации буквально использовали одно и то же в течение десятилетий (/etc/init/hostname.conf все еще содержит его), поэтому я должен сказать, что я действительно озадачен тем, как об этом никто уже не упоминал:)

3
ответ дан 17 July 2018 в 17:03

Вот сценарий, который изменяет имя хоста предписанным образом. Это гарантирует, что не только функции sudo, но и X11 продолжают функционировать без необходимости перезапуска.

Использование: sudo ./change_hostname.sh new-hostname

#!/usr/bin/env bash NEW_HOSTNAME=$1 echo $NEW_HOSTNAME > /proc/sys/kernel/hostname sed -i 's/127.0.1.1.*/127.0.1.1\t'"$NEW_HOSTNAME"'/g' /etc/hosts echo $NEW_HOSTNAME > /etc/hostname service hostname start su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"
16
ответ дан 17 July 2018 в 17:03

Чтобы получить текущее имя хоста:

cat /etc/hostname

Это можно изменить в любом текстовом редакторе. Вам также необходимо обновить запись, отличную от localhost, против 127.0.0.1 в /etc/hosts.

7
ответ дан 17 July 2018 в 17:03
sudo hostname your-new-name sudo /etc/init.d/networking restart

Это должно сработать, я думаю,

3
ответ дан 17 July 2018 в 17:03

Cloud-init (Ubuntu 18+) hostname persistence

Хотя вышеупомянутые подходы (hostnamectl, etc/hostname и т. д.) работают для немедленного изменения имени хоста с появлением cloud-init - который может управлять настройкой имени хоста - помимо многих других. Таким образом, он не будет вставлен после перезагрузки, если будет установлен cloud-init. Если вы хотите, чтобы изменения остались после перезагрузки, вам необходимо отредактировать файлы конфигурации init-init, отключите модуль / номер узла хоста host-init:

sudo sed 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg

или полностью отключите cloud-init :

sudo touch /etc/cloud/cloud-init.disabled
0
ответ дан 17 July 2018 в 17:03

Я прочитал ответы. Но я думаю, что вы, вероятно, ищете это:

Просто выполните эти две команды после редактирования файла /etc/hostname.

$ sudo service hostname restart $ exec bash

Это все. Не нужно перезапускать. Также убедитесь, что вы также изменили имя в файле /etc/hosts.

3
ответ дан 17 July 2018 в 17:03

Без перезапуска:

изменить имя хоста в /etc/hostname update /etc/hosts соответственно sudo sysctl kernel.hostname=mynew.local.host

Проверить текущее имя хоста с помощью hostname -f

11
ответ дан 17 July 2018 в 17:03

Ubuntu 16.04

Это без перезапуска и без использования терминала.

Перейдите в раздел «Настройки системы» -> «Подробности». Вот оно. Помимо имени устройства есть текстовое поле. Отредактируйте текстовое поле и закройте окно.

Открыть терминал. Посмотрите сами.

(Для более старых версий текстовое поле недоступно для редактирования.)

4
ответ дан 17 July 2018 в 17:03
Замените содержимое /etc/hostname на нужное имя хоста (вы можете редактировать с помощью sudo nano /etc/hostname). В /etc/hosts замените запись рядом с 127.0.1.1 на нужное имя хоста (вы можете редактировать с помощью sudo nano /etc/hosts). Выполнить sudo service hostname restart; sudo service networking restart
4
ответ дан 23 July 2018 в 17:54

Ubuntu 16.04

Решение основано на ответе от DigitalOcean Comunity.

Редактировать файл hosts.

$ sudo nano /etc/hosts

Заменить hosts с новым.

127.0.0.1 localhost newname

Установите новое имя хоста.

$ sudo hostnamectl set-hostname newname

1
ответ дан 23 July 2018 в 17:54

Классический ответ на вопрос оригинального плаката заключается в том, что после того, как вы отредактировали /etc/hostname, вы примените его без перезапуска, запустив имя хоста (1) с параметром -F (--file) в качестве пользователя root: [ ! d0] sudo hostname -F /etc/hostname

Обработка hostname (1) с /etc/hostname и указанной программой была одинаковой в Debian и ее производных уже более двадцати лет, а пакет, предоставляющий ее был отмечен как существенный, так и требуемый, и IIRC сценарии инициализации буквально использовали одно и то же в течение десятилетий (/etc/init/hostname.conf все еще содержит его), поэтому я должен сказать, что я действительно озадачен тем, как об этом никто уже не упоминал:)

3
ответ дан 23 July 2018 в 17:54
  • 1
    В Ubuntu 12.10 последняя часть не работает со следующим сообщением об ошибке sudo: unable to resolve host old-hostname. Для этой части решение @jesperado работает хорошо. – Frédéric Grosshans 23 November 2012 в 16:54
  • 2
    Если вы не обновляете /etc/hosts, вещи mant начинают сбой 12.04.2 LTS, включая команду w, Apache, /sbin/reboot и многое другое. Обязательно обновите /etc/hosts – Josh 14 August 2013 в 01:10
  • 3
    Вы ссылаетесь на оба 127.0.0.1 для localhost и 127.0.1.1 для пользовательского имени хоста. Правильно? Затем, в конце вашего ответа, для действия без репота вы ссылаетесь на /etc/hosts и 127.0.0.1 newhost oldhost. Таким образом, нет необходимости в адресе 127.0.1.1? – Nikos Alexandris 19 December 2015 в 15:22
  • 4
    не работал для меня. я должен был использовать sudo nano /etc/hosts, чтобы изменения вступили в силу; без sudo, просто nano /etc/hosts не сохранил изменения – conman253 31 January 2018 в 03:30
  • 5
    В чем разница между перезагрузкой и перезагрузкой? – storm 18 April 2018 в 14:45

Вот сценарий, который изменяет имя хоста предписанным образом. Это гарантирует, что не только функции sudo, но и X11 продолжают функционировать без необходимости перезапуска.

Использование: sudo ./change_hostname.sh new-hostname

#!/usr/bin/env bash NEW_HOSTNAME=$1 echo $NEW_HOSTNAME > /proc/sys/kernel/hostname sed -i 's/127.0.1.1.*/127.0.1.1\t'"$NEW_HOSTNAME"'/g' /etc/hosts echo $NEW_HOSTNAME > /etc/hostname service hostname start su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"
16
ответ дан 23 July 2018 в 17:54
  • 1
    Что делает последняя строка в скрипте su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"? Просто любопытно. – Fr0zenFyr 10 March 2014 в 18:22
  • 2
    @ Fr0zenFyr: он принимает действительный токен аутентификации X11 (xauth list) и заменяет старое имя хоста новым именем хоста (sed). Затем awk помещает кавычки вокруг первого аргумента в xauth add, потому что формат ввода и вывода xauth не симметричен. – Lucas 12 March 2014 в 03:36
  • 3
    Спасибо за объяснение. Я всегда перезагружался, чтобы изменения вступили в силу. +1 – Fr0zenFyr 12 March 2014 в 10:02
  • 4
    @trakz: Фактически 127.a.b.c независимо от числа, является локальным хостом в соответствии с IETF RFC. (большинство людей просто этого не знают, но, как правило, нет, отредактируйте одобренные) – Fabby 8 January 2015 в 01:25

Чтобы получить текущее имя хоста:

cat /etc/hostname

Это можно изменить в любом текстовом редакторе. Вам также необходимо обновить запись, отличную от localhost, против 127.0.0.1 в /etc/hosts.

7
ответ дан 23 July 2018 в 17:54
  • 1
    Обратите внимание, что это недоступно повсюду. Просто посмотрел мою установку Ubuntu 14.04 LTS ARM-7, а hostnamectl не существует. Угадайте, какие вкусы Ubuntu еще не используют systemd. – Stéphane 6 July 2015 в 05:52
  • 2
    @ Stéphane команды являются частью пакета systemd, но они доступны независимо. В этом случае 13.04-14.10 не используют systemd как init, по этой команде. – muru 6 July 2015 в 08:05
  • 3
    Или просто запустите команду & quot; hostname & quot; из командной строки. – elomage 1 October 2015 в 16:28
  • 4
    @ H2ONaCl переменная оболочки устанавливается при запуске, просто откройте другую оболочку и переменная hostname должна быть в порядке. Что касается sudo, ошибка разрешения имени хоста никогда не мешала мне что-либо делать. – muru 31 January 2017 в 17:57
  • 5
    @ H2ONaCl ах, но переменная HOSTNAME не стандартная - мишень IIRC и ksh ее не имеет, zsh использует HOST, так что, поскольку переменные оболочки идут, это дно кучи. – muru 31 January 2017 в 18:14
  • 6
    Все еще работает в Ubuntu 18.04 LTS. – donlucacorleone 15 June 2018 в 18:30
sudo hostname your-new-name sudo /etc/init.d/networking restart

Это должно сработать, я думаю,

3
ответ дан 23 July 2018 в 17:54

Cloud-init (Ubuntu 18+) hostname persistence

Хотя вышеупомянутые подходы (hostnamectl, etc/hostname и т. д.) работают для немедленного изменения имени хоста с появлением cloud-init - который может управлять настройкой имени хоста - помимо многих других. Таким образом, он не будет вставлен после перезагрузки, если будет установлен cloud-init. Если вы хотите, чтобы изменения остались после перезагрузки, вам необходимо отредактировать файлы конфигурации init-init, отключите модуль / номер узла хоста host-init:

sudo sed 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg

или полностью отключите cloud-init :

sudo touch /etc/cloud/cloud-init.disabled
0
ответ дан 23 July 2018 в 17:54

Я прочитал ответы. Но я думаю, что вы, вероятно, ищете это:

Просто выполните эти две команды после редактирования файла /etc/hostname.

$ sudo service hostname restart $ exec bash

Это все. Не нужно перезапускать. Также убедитесь, что вы также изменили имя в файле /etc/hosts.

3
ответ дан 23 July 2018 в 17:54
  • 1
    В отличие от многих других ответов, это не обновляет /etc/hosts (я подтвердил 14.04). – IsaacS 22 May 2018 в 03:19

Без перезапуска:

изменить имя хоста в /etc/hostname update /etc/hosts соответственно sudo sysctl kernel.hostname=mynew.local.host

Проверить текущее имя хоста с помощью hostname -f

11
ответ дан 23 July 2018 в 17:54
  • 1
    С 16.04, sysctl sudo: unable to resolve host oldname, sysctl: setting key "kernel.hostname": Read-only file system. Возможно, это CT в Proxmox. – Pablo Bianchi 23 May 2018 в 01:44

Ubuntu 16.04

Это без перезапуска и без использования терминала.

Перейдите в раздел «Настройки системы» -> «Подробности». Вот оно. Помимо имени устройства есть текстовое поле. Отредактируйте текстовое поле и закройте окно.

Открыть терминал. Посмотрите сами.

(Для более старых версий текстовое поле недоступно для редактирования.)

4
ответ дан 23 July 2018 в 17:54

Другие вопросы по тегам:

Похожие вопросы: