Як змінити ім'я хоста без перезавантаження?


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
я не хочу перезапускати
Deepak Rajput

23
Я знаю. тому ви повинні використовувати команду 'ім'я хоста'. Я просто хотів уточнити, що команда 'ім'я хоста' змінює ім'я хоста лише до того моменту, поки ви не перезапустите / збите / тощо. Після цього він знову прочитає ім'я з файлу.
jasperado

5
Залежить. Якщо ви ввели команду, вам не потрібно перезапускати. Ім'я хоста вже змінено. Але лише до наступного перезапуску.
jasperado

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 команди є частиною системного набору, але вони доступні незалежно. У цьому випадку 13.04-14.10 не використовується systemd як init, команда доступна.
муру

1
@ H2ONaCl змінна оболонки встановлюється при запуску, просто відкрийте іншу оболонку, і змінна назва хоста повинна бути в порядку. Що стосується sudo, то помилка щодо вирішення імені хоста насправді ніколи не заважала мені щось робити.
муру

1
@ H2ONaCl ах, але переменная HOSTNAME не є стандартною - тире IIRC і ksh не мають її, zsh використовує HOST, тому що для змінних оболонок це нижня частина купи.
муру

3
Досі працює в Ubuntu 18.04 LTS.
ЛукаМ

63

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

Зміна імені хоста чи комп'ютера в ubuntu без перезавантаження

Редагувати / etc / ім'я хоста та змінити нове значення,

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, виберіть відновлення та відредагуйте ваш хост-файл на правильні налаштування)

Тепер після перезавантаження ваше ім’я хоста стане новим, яке ви вибрали

Без перезавантаження

Щоб змінитись без перезавантаження , ви можете просто використовувати hostname.sh після редагування / etc / name host. Ви повинні зберігати обидва імена хостів у / 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, речі манти починають виходити з ладу 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щоб зміни вступили в силу; без судо, просто nano /etc/hostsне врятував зміни
conman253

2
Яка різниця між перезавантаженням та перезавантаженням?
шторм

43

Ім'я за замовчуванням було встановлено під час встановлення Ubuntu. Ви можете легко змінити його на все, що завгодно, як на робочому столі, так і на сервері, відредагувавши файли хостів та імен хостів. Нижче описано, як:

  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) і замінює старе ім'я хоста новим ім'ям хоста ( 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і т. Д.) Працюють для негайної зміни імені хоста, з появою хмари-init - який може керувати налаштуванням імені хоста - серед багатьох інших речей. Таким чином, він не буде триматися після перезавантаження, якщо встановлено хмарно-ініт. Якщо ви хочете, щоб зміни залишалися після перезавантаження, вам потрібно буде відредагувати файли конфігурації cloud-init , відключити набір / оновлення модуля імені хоста cloud-init :

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

або повністю відключити хмару-init:

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

1
Будь ласка, підтримайте цю відповідь. Це чудово працювало для мене. Інші відповіді не працюють із прийняттям cloud-init.
nslntmnx

@nslntmnx це встановлено за замовчуванням на робочому столі 18.04, лише на сервері? Настільного немає /etc/cloud/cloud.cfg. Яка назва пакета? Просто cloud-init?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
Також, чи є спосіб змінити ім'я хоста за допомогою cloud-init, а не просто вимкнути його переопределення?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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

7

Щоб отримати своє поточне ім’я хоста:

cat /etc/hostname

Це можна змінити в будь-якому текстовому редакторі. Вам також потрібно оновити запис, який не є localhost, проти 127.0.0.1 в / etc / hosts.


1
Або просто запустіть команду "ім'я хоста" з командного рядка.
еломаж

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 Ви впевнені в цьому? Я бачу в хмарі-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ви застосовуєте його без перезапуску, запустивши ім'я хоста (1) з параметром -F( --file) як корінь:

sudo hostname -F /etc/hostname

Ім'я хоста (5), що працює з /etc/hostnameцією програмою, було одне і те ж в Debian і його похідних вже більше двадцяти років, і пакет, що забезпечує його , позначений як необхідний і необхідний , а IIRC сценарії init буквально використовували те ж саме для десятиліття ( /etc/init/hostname.confвсе ще містить його), тому мушу сказати, що я щиро спантеличений, як ніхто про це вже не згадував :)


Попередження: не працюватиме з Ubuntu 18+, який за замовчуванням працює cloud-init, який керує ім'ям хоста під час завантаження.
nslntmnx

@nslntmnx erm, що? Яку нову залежність ввів Ubuntu 18, щоб перетягнути хмару-init за замовчуванням? Можливо, ви думаєте про деякі спеціально налаштовані хмари зображень, і в цьому випадку це не повинно стати несподіванкою того, що вони запускають спеціальні засоби хмарного забезпечення.
Йосип Родін

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

Це повинно зробити роботу, яку я думаю


5
Я не думаю, що це переживе перезапуск
Collin Anderson

Попередження: не працюватиме з 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.

Редагувати файл хостів .

$ 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.