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


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.