Как мне изменить имя хоста без перезагрузки?


497

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

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


3
Предупреждение: не будет работать с Ubuntu 18+, который по умолчанию использует cloud-init, который контролирует имя хоста при загрузке.
— nslntmnx

@nslntmnx, спасибо!
— MiB

Ответы:


642

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

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

sudo hostname your-new-name

Это установит имя хоста на ваше новое имя, пока вы не перезапустите. Смотрите man hostnameи Как мне изменить имя компьютера? для дополнительной информации. Не используйте _на свое имя.

Запись

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

sudo -H gedit /etc/hostname

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

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

sudo service hostname start

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

127.0.1.1     your-old-hostname

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


4
я не хочу перезапускать
— Дипак Раджпут

23
Я знаю. вот почему вы должны использовать команду 'hostname'. Я просто хотел уточнить, что команда 'hostname' изменяет только имя хоста, пока вы не перезапустите / crash / etc. После этого он снова прочитает имя из файла.
— Ясперадо

5
Зависит. Если вы ввели команду, вам не нужно перезапускать. Имя хоста уже изменено. Но только до вашего следующего перезапуска.
— Ясперадо

19
Обратите внимание, что вы также должны изменить /etc/hosts(см. Другие ответы)
— JB.

9
Короче говоря, хотя hostnameновое имя вступает в силу немедленно, оно не является «постоянным», если вы не измените его, /etc/hostnameи /etc/hosts, поскольку это файлы, которые будут прочитаны после перезапуска или сбоя, что, конечно, может не быть ожидая раньше времени.
— Тим Паренти

280

Ubuntu 13.04 года

Эта hostnamectlкоманда является частью установки по умолчанию в версиях для настольных компьютеров и серверов.

Он сочетает в себе установку имени хоста с помощью hostnameкоманды и редактирования /etc/hostname. Помимо установки статического имени хоста, он может установить «красивое» имя хоста, которое не используется в Ubuntu. К сожалению, редактирование /etc/hostsвсе еще должно быть сделано отдельно.

hostnamectl set-hostname new-hostname

Эта команда является частью systemd-servicesпакета (который, как в Ubuntu 14.04, также включает в себя timedatectlи localectlкоманды). По мере перехода на Ubuntu systemdэтот инструмент - будущее.


1
Обратите внимание, что это доступно не везде. Только что посмотрел на мою установку Ubuntu 14.04 LTS ARM-7, и hostnamectlне существует. Думаю, некоторые версии Ubuntu еще не используют systemd.
— Стефан

1
@ Stéphane команды являются частью пакета systemd, но они доступны независимо. В этом случае 13.04-14.10 не используют systemd в качестве init, команда доступна.
— Муру

1
@ H2ONaCl переменная оболочки установлена ​​при запуске, просто откройте другую оболочку и переменная hostname должна быть в порядке. Что касается sudo, ошибка разрешения имени хоста никогда не мешала мне что-либо делать.
— Муру

1
@ H2ONaCl ах, но переменная HOSTNAME не стандартна - у IIRC тире и у ksh его нет, у zsh используется HOST, поэтому что касается переменных оболочки, то это дно кучи.
— Муру

3
До сих пор работает в Ubuntu 18.04 LTS.
— LucaM

63

Без перезагрузки

Изменение имени хоста или компьютера в Ubuntu без перезагрузки

Отредактируйте / etc / hostname и измените на новое значение,

nano /etc/hostname 

Отредактируйте / etc / hosts и измените старую строку 127.0.1.1 на новое имя хоста

127.0.0.1   localhost
127.0.1.1   ubuntu.local    ubuntu   # change to your new hostname/fqdn

Примечание : я прочитал его на форуме> Отредактируйте / etc / hosts и измените старую строку 127.0.1.1 на новое имя хоста (если вы этого не сделаете, вы больше не сможете использовать sudo. Если вы уже сделали это нажмите ESC в меню grub, выберите recovery и отредактируйте файл хоста с правильными настройками)

Теперь после перезагрузки, ваше имя хоста будет новым, которое вы выбрали

Без перезагрузки

Чтобы изменить без перезагрузки , вы можете просто использовать hostname.sh после редактирования / etc / hostname. Вы должны хранить оба имени хоста в / etc / hosts (127.0.0.1 newhost oldhost), пока не выполните следующую команду:

sudo service hostname start

Примечание : выше команды, чтобы сделать изменение активным. Имя хоста, сохраненное в этом файле (/ etc / hostname), будет сохранено при перезагрузке системы (и будет установлено с использованием той же службы).


В Ubuntu 12.10 последняя часть не работает со следующим сообщением об ошибке sudo: unable to resolve host old-hostname. С этой стороны, решение @jesperado работает хорошо.
— Фредерик Гроссханс

3
Если вы не обновитесь /etc/hosts, mant вещи начнут давать сбой на 12.04.2 LTS, включая wкоманду, Apache /sbin/rebootи многое другое. Обязательно обновите/etc/hosts
— Джош

Вы имеете в виду как 127.0.0.1для localhostи 127.0.1.1для пользовательского имени хоста. Правильно? Затем, в конце вашего ответа, для действия без перезагрузки , вы ссылаетесь /etc/hostsи 127.0.0.1 newhost oldhost. Итак, 127.0.1.1адрес не нужен ?
— Никос Александрис

1
не работает для меня я должен был использовать, sudo nano /etc/hostsчтобы изменения вступили в силу; без sudo, просто nano /etc/hostsне сохранили изменения
— conman253

2
В чем разница между перезагрузкой и перезагрузкой?
— шторм

43

Имя по умолчанию было установлено при установке Ubuntu. Вы можете легко изменить его на рабочий стол и сервер, отредактировав файлы hosts и hostname. Ниже как:

  1. Нажмите CtrlAlttна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните следующую команду:sudo hostname NEW_NAME_HERE

Это изменит имя хоста до следующей перезагрузки. Изменение не будет видно сразу в вашем текущем терминале. Запустите новый терминал, чтобы увидеть новое имя хоста.

  1. Чтобы изменить имя навсегда, выполните команду для редактирования файлов хоста:

    sudo -H gedit /etc/hostname а также sudo -H gedit /etc/hosts

Для сервера Ubuntu без графического интерфейса, запускать sudo vi /etc/hostnameи sudo vi /etc/hostsи редактировать их по одному. В обоих файлах измените имя на то, что вы хотите, и сохраните их.

Наконец, перезагрузите компьютер, чтобы изменения вступили в силу.


16

Вот скрипт, который меняет имя хоста в установленном порядке. Это гарантирует, что не только, 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}')"

Что делает последняя строка в скрипте su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"? Просто любопытно.
— Fr0zenFyr

4
@ Fr0zenFyr: он принимает действительный токен аутентификации X11 ( xauth list) и заменяет старое имя хоста новым hostname ( sed). Затем awkзаключает в кавычки первый аргумент, xauth addпотому что xauthформат ввода и вывода не симметричен.
— Лукас

Спасибо за объяснение. Я всегда перезагружался, чтобы изменения вступили в силу. +1
— Fr0zenFyr

@trakz: На самом деле 127.abc независимо от числа, все localhost согласно IETF RFC. (большинство людей просто не знают этого, но, как и большинство, этого не знают, редактировать утверждено)
— Fabby

14

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

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

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


С 16.04, SYSCTL sudo: unable to resolve host oldname, sysctl: setting key "kernel.hostname": Read-only file system. Может быть, потому что это КТ внутри Proxmox.
— Пабло А

14

Сохранение имени хоста в Cloud-init (Ubuntu 18+)

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

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

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

sudo touch /etc/cloud/cloud-init.disabled

1
Пожалуйста, проголосуйте за этот ответ. Это отлично сработало для меня. Другие ответы не работают с принятием cloud-init.
— nslntmnx

@nslntmnx он установлен по умолчанию на рабочем столе 18.04, только на сервере? Рабочий стол не имеет /etc/cloud/cloud.cfg. Какое название пакета? Просто cloud-init?
— Сиро Сантилли 新疆 新疆 中心 法轮功 六四 事件

1
Кроме того, есть ли способ изменить имя хоста с помощью cloud-init вместо простого отключения его переопределения?
— Сиро Сантилли 事件 新疆 中 at 法轮功 六四 事件

1
Да , вы можете изменить множество параметров с помощью облачных иниц - смотрите документы ссылку на мой ответ - вот ссылка на настройки имени хоста: cloudinit.readthedocs.io/en/latest/topics/...
— Пирз

7

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

cat /etc/hostname

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


1
Или просто запустите команду «hostname» из командной строки.
— красноречие

4
  1. Замените содержимое /etc/hostnameна желаемое имя хоста (вы можете редактировать с помощью sudo nano /etc/hostname)
  2. В /etc/hosts, замените запись рядом с 127.0. 1 .1 с желаемым именем хоста (вы можете редактировать с помощью sudo nano /etc/hosts)
  3. казнить sudo service hostname restart; sudo service networking restart

Предупреждение: не будет работать с Ubuntu 18+, который по умолчанию использует cloud-init, который контролирует имя хоста при загрузке.
— nslntmnx

@nslntmnx ты уверен в этом? Я вижу в cloud-config.txt, # if you do nothing you'll end up with: # * /etc/hostname (and 'hostname') managed via: 'preserve_hostame: false' # if you do not change /etc/hostname, it will be updated with the cloud # provided hostname on each boot. If you make a change, then manual # maintenance takes over, and cloud-init will not modify it.что у меня нет Ubuntu 18, поэтому я не могу протестировать его до выходных.
— Джордж

4

Ubuntu 16.04

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

  • Зайдите в Настройки системы -> Детали .
  • Вот оно Рядом с именем устройства есть текстовое поле.
  • Редактировать текстовое поле и закрыть окно.

Откройте терминал. Смотрите сами.

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


4

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

sudo hostname -F /etc/hostname

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


Предупреждение: не будет работать с Ubuntu 18+, который по умолчанию использует cloud-init, который контролирует имя хоста при загрузке.
— nslntmnx

@nslntmnx эм, что? Какую новую зависимость представила Ubuntu 18 для включения cloud-init по умолчанию? Вы можете подумать о некоторых облачных изображениях, и в этом случае неудивительно, что они запускают пользовательские инструменты облачной подготовки.
— Иосип Роден

3
sudo hostname your-new-name
sudo /etc/init.d/networking restart

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


5
Я не думаю, что это переживет перезапуск
— Коллин Андерсон

Предупреждение: не будет работать с Ubuntu 18+, который по умолчанию использует cloud-init, который контролирует имя хоста при загрузке.
— nslntmnx

3

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

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

$ sudo service hostname restart
$ exec bash

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


В отличие от многих других ответов, это не обновляет /etc/hosts(я подтвердил 14.04).
— Исаак

Предупреждение: не будет работать с Ubuntu 18+, который по умолчанию использует cloud-init, который контролирует имя хоста при загрузке.
— nslntmnx

2

Ubuntu 16.04

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

Отредактируйте файл hosts .

$ sudo nano /etc/hosts

Замените старое имя новым.

127.0.0.1 localhost newname

Настройте новое имя хоста.

$ sudo hostnamectl set-hostname newname


Предупреждение: не будет работать с Ubuntu 18+, который по умолчанию использует cloud-init, который контролирует имя хоста при загрузке.
— nslntmnx
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.