Jak zmienić nazwę hosta bez ponownego uruchomienia?


497

Chcę zmienić nazwę hosta systemu operacyjnego, ale nie chcę restartować.

Zredagowałem, /etc/hostnameale wymaga ponownego uruchomienia w celu wdrożenia. Jak tego uniknąć?


3
Ostrzeżenie: nie będzie działać z Ubuntu 18+, który domyślnie uruchamia chmurę-init, która kontroluje nazwę hosta podczas rozruchu.
nslntmnx

@nslntmnx, Dziękujemy!
MiB

Odpowiedzi:


642

To jest łatwe. Po prostu kliknij ikonę koła zębatego (znajdującą się w prawym górnym rogu ekranu), otwórz ekran „Informacje o tym komputerze” (znajdujący się pod ikoną koła zębatego) i edytuj „Nazwa urządzenia”.

Lub w terminalu użyj następującego polecenia:

sudo hostname your-new-name

Spowoduje to ustawienie nazwy hosta na twoją nową nazwę do momentu ponownego uruchomienia. Zobacz man hostnamei jak zmienić nazwę komputera? w celu uzyskania dalszych informacji. Nie używaj _w swoim imieniu.

Uwaga

Po ponownym uruchomieniu twoje zmiany /etc/hostnamezostaną wykorzystane, więc (jak powiedziałeś w pytaniu), powinieneś nadal używać

sudo -H gedit /etc/hostname

(lub inny edytor), aby plik zawierał nazwę hosta.

Aby sprawdzić, czy plik jest poprawnie skonfigurowany, uruchom:

sudo service hostname start

Powinieneś również edytować /etc/hostsi zmienić wiersz o treści:

127.0.1.1     your-old-hostname

aby zawierała teraz nową nazwę hosta. (Jest to wymagane, w przeciwnym razie wiele poleceń przestanie działać.)


4
nie chcę ponownie uruchamiać
Deepak Rajput,

23
Wiem. dlatego powinieneś użyć polecenia „nazwa hosta”. Chciałem tylko wyjaśnić, że polecenie „nazwa hosta” zmienia tylko nazwę hosta do momentu ponownego uruchomienia / awarii / etc. Następnie ponownie odczyta nazwę z pliku.
jasperado

5
Zależy. Jeśli wprowadziłeś polecenie, nie musisz restartować. Nazwa hosta została już zmieniona. Ale tylko do następnego uruchomienia.
jasperado

19
Pamiętaj, że musisz również zmienić /etc/hosts(patrz inne odpowiedzi)
JB.

9
Krótko mówiąc, chociaż hostnamespowoduje, że nowa nazwa zacznie obowiązywać natychmiast, nie będzie ona jednak „trwała”, chyba że ulegniesz zmianie, /etc/hostnamea /etc/hostsponieważ są to pliki, które zostaną odczytane po ponownym uruchomieniu lub awarii, co oczywiście może nie być oczekując z wyprzedzeniem.
Tim Parenti

280

Ubuntu 13.04 i nowsze

hostnamectlKomenda jest częścią domyślnej instalacji na obu wydań Desktop i Server.

Łączy ustawianie nazwy hosta za pomocą hostnamepolecenia i edycji /etc/hostname. Oprócz ustawienia statycznej nazwy hosta, można ustawić „ładną” nazwę hosta, która nie jest używana w Ubuntu. Niestety, edycja /etc/hostsmusi być jeszcze wykonana osobno.

hostnamectl set-hostname new-hostname

To polecenie jest częścią systemd-servicespakietu (który, począwszy od Ubuntu 14.04, zawiera także polecenia timedatectli localectl). W miarę migracji Ubuntu systemdto narzędzie jest przyszłością.


1
Uwaga: to nie jest dostępne wszędzie. Właśnie obejrzałem moją instalację Ubuntu 14.04 LTS ARM-7 i hostnamectlnie istnieje. Zgadnij, niektóre smaki Ubuntu nie używają jeszcze systemd.
Stéphane,

1
@ Stéphane polecenia są częścią pakietu systemd, ale są dostępne niezależnie. W tym przypadku 13.04-14.10 nie używaj systemd jako init, ponieważ polecenie jest dostępne.
muru

1
@ H2ONaCl zmienna powłoki jest ustawiana podczas uruchamiania, wystarczy otworzyć kolejną powłokę, a zmienna nazwy hosta powinna działać poprawnie. Jeśli chodzi o sudo, błąd dotyczący rozpoznawania nazwy hosta nigdy nie przeszkodził mi w zrobieniu czegokolwiek.
muru

1
@ H2ONaCl ah, ale zmienna HOSTNAME nie jest standardem - myślnik IIRC i ksh go nie mają, zsh używa HOST, więc jeśli chodzi o zmienne powłoki, jest to dno stosu.
muru

3
Nadal działa w systemie Ubuntu 18.04 LTS.
LucaM

63

Bez ponownego uruchomienia

Zmiana nazwy hosta lub nazwy komputera w Ubuntu bez restartu

Edytuj / etc / hostname i zmień na nową wartość,

nano /etc/hostname 

Edytuj plik / etc / hosts i zmień stary wiersz 127.0.1.1 na nową nazwę hosta

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

Uwaga : przeczytałem go na forum> Edytuj / etc / hosts i zmieniłem stary wiersz 127.0.1.1 na nową nazwę hosta (jeśli tego nie zrobisz, nie będziesz już mógł używać sudo. Jeśli już to zrobiłeś , naciśnij ESC w menu grub, wybierz odzyskiwanie i edytuj plik hosta, aby uzyskać prawidłowe ustawienia)

Teraz po ponownym uruchomieniu twoja nazwa hosta będzie nową, którą wybrałeś

Bez ponownego uruchomienia

Aby zmienić bez ponownego uruchomienia , możesz po prostu użyć hostname.sh po edycji / etc / hostname. Musisz zachować obie nazwy hostów w / etc / hosts (127.0.0.1 newhost oldhost), dopóki nie wykonasz poniższej komendy:

sudo service hostname start

Uwaga : powyższe polecenie, aby aktywować zmianę. Nazwa hosta zapisana w tym pliku (/ etc / hostname) zostanie zachowana przy ponownym uruchomieniu systemu (i zostanie ustawiona przy użyciu tej samej usługi).


W systemie Ubuntu 12.10 ostatnia część nie działa z następującym komunikatem o błędzie sudo: unable to resolve host old-hostname. W tej części rozwiązanie @jesperado działa dobrze.
Frédéric Grosshans

3
Jeśli się nie zaktualizujesz /etc/hosts, niektóre rzeczy zaczną zawieść 12.04.2 LTS, w tym wpolecenie, Apache /sbin/rebooti wiele innych. Zaktualizuj/etc/hosts
Josh

Odwołujesz się zarówno 127.0.0.1do niestandardowej nazwy hosta, jak localhosti 127.0.1.1do niej. Dobrze? Następnie, pod koniec swojej odpowiedzi, w przypadku akcji bez ponownego uruchomienia odwołujesz się /etc/hostsi 127.0.0.1 newhost oldhost. Więc nie potrzebujesz 127.0.1.1adresu?
Nikos Alexandris,

1
nie działało dla mnie. musiałem użyć, sudo nano /etc/hostsaby zmiana zaczęła obowiązywać; bez sudo, po prostu nano /etc/hostsnie
zapisałem

2
Jaka jest różnica między restartem a restartem?
burza

43

Domyślna nazwa została ustawiona podczas instalacji Ubuntu. Możesz łatwo zmienić to, co chcesz na komputerze i serwerze, edytując pliki hostów i nazwy hostów. Poniżej znajduje się, jak:

  1. Naciśnij CtrlAlttna klawiaturze, aby otworzyć terminal. Po otwarciu uruchom poniższe polecenie:sudo hostname NEW_NAME_HERE

Spowoduje to zmianę nazwy hosta do następnego uruchomienia. Zmiana nie będzie widoczna od razu w twoim obecnym terminalu. Uruchom nowy terminal, aby zobaczyć nową nazwę hosta.

  1. Aby trwale zmienić nazwę, uruchom polecenie, aby edytować pliki hosta:

    sudo -H gedit /etc/hostname i sudo -H gedit /etc/hosts

Na serwerze Ubuntu bez GUI, uruchom sudo vi /etc/hostnamei sudo vi /etc/hostsi edytować je jeden po drugim. W obu plikach zmień nazwę na odpowiednią i zapisz ją.

Na koniec uruchom ponownie komputer, aby zastosować zmiany.


16

Oto skrypt, który zmienia nazwę hosta w określony sposób. Zapewnia to, że nie tylko, sudoale także aplikacje X11 będą nadal działać bez konieczności restartu.

Stosowanie: 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}')"

Co robi ostatni wiersz skryptu su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"? Po prostu ciekawy.
Fr0zenFyr

4
@ Fr0zenFyr: pobiera prawidłowy token uwierzytelniania X11 ( xauth list) i zastępuje starą nazwę hosta nową nazwą hosta ( sed). Następnie awkumieszcza cudzysłowy wokół pierwszego argumentu, xauth addponieważ xauthformat wejściowy i wyjściowy nie są symetryczne.
Lucas

Dziękuję za wyjaśnienie. Zawsze zrestartowałem się, aby zmiany zaczęły obowiązywać. +1
Fr0zenFyr

@trakz: Właściwie 127.abc, bez względu na numer, jest wszystkim hostem lokalnym zgodnie z IETF RFC. (większość ludzi po prostu tego nie wie, ale jak większość nie, edytuj zatwierdzona)
Fabby

14

Bez ponownego uruchomienia:

  1. zmień nazwę hosta w /etc/hostname
  2. zaktualizuj /etc/hostsodpowiednio
  3. sudo sysctl kernel.hostname=mynew.local.host

Sprawdź swoją bieżącą nazwę hosta za pomocą hostname -f


Z 16.04, sysctl sudo: unable to resolve host oldname, sysctl: setting key "kernel.hostname": Read-only file system. Może dlatego, że jest CT wewnątrz Proxmox.
Pablo A

14

Trwałość nazwy hosta przez chmurę init (Ubuntu 18+)

Chociaż powyższe podejścia ( hostnamectl, etc/hostnameitp) pracować dla natychmiastowej zmiany nazwy hosta, wraz z pojawieniem się chmury inicjalizacji - które może kontrolować ustawienia nazwy hosta - amoungst wiele innych rzeczy. Więc nie pozostanie po ponownym uruchomieniu, jeśli zainstalowana jest inicjacja chmurowa. Jeśli chcesz, aby zmiana pozostała po ponownym uruchomieniu, musisz edytować pliki konfiguracyjne inicjowania chmury, wyłącz moduł ustawiania / aktualizacji nazwy hosta chmury :

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

lub całkowicie wyłącz chmurę:

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

1
Proszę głosować za odpowiedzią. To zadziałało dla mnie świetnie. Inne odpowiedzi nie działają z przyjęciem chmurowego inicjowania.
nslntmnx

@nslntmnx czy jest domyślnie instalowany na pulpicie 18.04, tylko na serwerze? Pulpit nie ma /etc/cloud/cloud.cfg. Jaka jest nazwa pakietu? Po prostu cloud-init?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
Ponadto, czy jest jakiś sposób na zmianę nazwy hosta za pomocą inicjowania w chmurze zamiast wyłączania jego zastępowania?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
Tak, możesz zmienić wiele ustawień za pomocą inicjowania w chmurze - zobacz link do dokumentów w mojej odpowiedzi - oto link do ustawiania nazwy hosta: cloudinit.readthedocs.io/en/latest/topics/…
Pierz

7

Aby uzyskać bieżącą nazwę hosta:

cat /etc/hostname

Można to zmienić w dowolnym edytorze tekstu. Musisz także zaktualizować wpis inny niż localhost w stosunku do 127.0.0.1 w / etc / hosts.


1
Lub po prostu uruchom polecenie „nazwa hosta” z wiersza poleceń.
elomage

4
  1. Zamień zawartość /etc/hostnamena żądaną nazwę hosta (możesz edytować za pomocą sudo nano /etc/hostname)
  2. W /etc/hostszastąp wpis obok 127.0. 1 .1 z żądaną nazwą hosta (można edytować za pomocą sudo nano /etc/hosts)
  3. Wykonać sudo service hostname restart; sudo service networking restart

Ostrzeżenie: nie będzie działać z Ubuntu 18+, który domyślnie uruchamia chmurę-init, która kontroluje nazwę hosta podczas rozruchu.
nslntmnx

@nslntmnx jesteś tego pewien? Widzę w 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.Obecnie nie mam Ubuntu 18, więc nie mogę go przetestować do weekendu.
George,

4

Ubuntu 16.04

Jest to bez ponownego uruchamiania i bez użycia terminala.

  • Przejdź do Ustawienia systemu -> Szczegóły .
  • Tu jest. Obok nazwy urządzenia znajduje się pole tekstowe.
  • Edytuj pole tekstowe i zamknij okno.

Otwórz terminal. Sprawdźcie sami.

(W starszych wersjach pola tekstowego nie można edytować).


4

Klasyczna odpowiedź na pytanie oryginalnego plakatu jest taka, że ​​po edycji /etc/hostnamewprowadzasz ją bez ponownego uruchamiania, uruchamiając nazwę hosta (1) z opcją -F( --file) jako root:

sudo hostname -F /etc/hostname

Hosta (5) postępowania z /etc/hostnamea wspomniany program jest taki sam w Debianie i jego pochodne od ponad dwudziestu lat, a pakiet pod warunkiem, że zostały oznaczone istotne i potrzebne , i IIRC skrypty startowe dosłownie stosować to samo dla dziesięciolecia ( /etc/init/hostname.confwciąż go zawiera), więc muszę powiedzieć, że jestem naprawdę zdziwiony tym, że nikt już o tym nie wspominał :)


Ostrzeżenie: nie będzie działać z Ubuntu 18+, który domyślnie uruchamia chmurę-init, która kontroluje nazwę hosta podczas rozruchu.
nslntmnx

@nslntmnx erm, co? Jaką nową zależność wprowadził Ubuntu 18, aby domyślnie pobierał inicjację z chmury? Być może myślisz o niektórych obrazach dostosowanych do chmury, w takim przypadku nie powinno dziwić, że działają na nich niestandardowe narzędzia do udostępniania chmury.
Josip Rodin

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

To powinno wystarczyć do pracy


5
Nie sądzę, że to przetrwa restart
Collin Anderson

Ostrzeżenie: nie będzie działać z Ubuntu 18+, który domyślnie uruchamia chmurę-init, która kontroluje nazwę hosta podczas rozruchu.
nslntmnx

3

Przeczytałem odpowiedzi, ale myślę, że prawdopodobnie tego szukasz:

Wystarczy wykonać te dwa polecenia po edycji /etc/hostnamepliku.

$ sudo service hostname restart
$ exec bash

To wszystko. Nie ma potrzeby ponownego uruchamiania. Upewnij się również, że zmienisz nazwę w /etc/hostspliku.


W przeciwieństwie do wielu innych odpowiedzi, to się nie aktualizuje /etc/hosts(potwierdziłem 14.04).
IsaacS

Ostrzeżenie: nie będzie działać z Ubuntu 18+, który domyślnie uruchamia chmurę-init, która kontroluje nazwę hosta podczas rozruchu.
nslntmnx

2

Ubuntu 16.04

Rozwiązanie oparte na odpowiedzi od DigitalOcean Comunity.

Edytuj plik hosts .

$ sudo nano /etc/hosts

Zastąp starą nazwę nową.

127.0.0.1 localhost newname

Ustaw nową nazwę hosta.

$ sudo hostnamectl set-hostname newname


Ostrzeżenie: nie będzie działać z Ubuntu 18+, który domyślnie uruchamia chmurę-init, która kontroluje nazwę hosta podczas rozruchu.
nslntmnx
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.