Come posso cambiare il nome host senza riavviare?


497

Voglio cambiare il nome host del SO ma non voglio riavviare.

Ho modificato /etc/hostnamema richiede un riavvio per essere implementato. Come evitarlo?


3
Attenzione: non funzionerà con Ubuntu 18+ che esegue cloud-init per impostazione predefinita, che controlla il nome host all'avvio.
nslntmnx,

@nslntmnx, grazie!
MiB

Risposte:


642

È facile. Fai clic sull'icona a forma di ingranaggio (situata nell'angolo in alto a destra dello schermo), apri la schermata "Informazioni sul computer" (situata sull'icona a forma di ingranaggio) e modifica "Nome dispositivo".

Oppure, in un terminale, utilizzare il seguente comando:

sudo hostname your-new-name

Ciò imposterà il nome host su tuo-nuovo-nome fino al riavvio. Vedi man hostnamee come posso cambiare il nome del computer? per maggiori informazioni. Non usare _a tuo nome.

Nota

Dopo un riavvio /etc/hostnameverranno utilizzate le modifiche apportate , quindi (come hai detto nella domanda), dovresti comunque utilizzare

sudo -H gedit /etc/hostname

(o qualche altro editor) in modo che il file contenga il nome host.

Per verificare che il file sia impostato correttamente, eseguire:

sudo service hostname start

Dovresti anche modificare /etc/hostse cambiare la riga che recita:

127.0.1.1     your-old-hostname

in modo che ora contenga il tuo nuovo nome host. (Ciò è necessario altrimenti molti comandi cesseranno di funzionare.)


4
non voglio riavviare
Deepak Rajput il

23
Lo so. ecco perché dovresti usare il comando 'hostname'. Volevo solo chiarire che il comando 'nomehost' cambia solo il nome host fino al riavvio / arresto anomalo / ecc. Successivamente leggerà nuovamente il nome dal file.
Jasperado,

5
Dipende. Se è stato immesso il comando non è necessario riavviare. Il nome host è già cambiato. Ma solo FINO al tuo prossimo riavvio.
Jasperado,

19
Nota che devi anche cambiare il /etc/hosts(vedi altre risposte)
JB.

9
In breve, anche se hostnamefarà sì che il nuovo nome abbia effetto immediato, non è "permanente" a meno che tu non cambi anche /etc/hostnamee /etc/hosts, poiché questi sono i file che verranno letti dopo un riavvio o un arresto anomalo, che ovviamente non potresti essere aspettando in anticipo.
Tim Parenti,

280

Ubuntu 13.04 in poi

Il hostnamectlcomando fa parte dell'installazione predefinita su entrambe le edizioni Desktop e Server.

Combina l'impostazione del nome host tramite il hostnamecomando e la modifica /etc/hostname. Oltre a impostare il nome host statico, può impostare il nome host "grazioso", che non viene utilizzato in Ubuntu. Sfortunatamente, la modifica /etc/hostsdeve ancora essere eseguita separatamente.

hostnamectl set-hostname new-hostname

Questo comando fa parte del systemd-servicespacchetto (che, a partire da Ubuntu 14.04, include anche i comandi timedatectle localectl). Mentre Ubuntu migra systemd, questo strumento è il futuro.


1
Nota che questo non è disponibile ovunque. Ho appena guardato la mia installazione Ubuntu 14.04 LTS ARM-7 e hostnamectlnon esiste. Suppongo che alcune versioni di Ubuntu non stiano ancora utilizzando systemd.
Stéphane,

1
@ Stéphane i comandi fanno parte della suite systemd, ma sono disponibili in modo indipendente. In questo caso, 13.04-14.10 non usano systemd come init, dal comando è disponibile.
Muru,

1
@ H2ONaCl la variabile shell è impostata all'avvio, basta aprire un'altra shell e la variabile hostname dovrebbe andare bene. Per quanto riguarda sudo, l'errore sulla risoluzione del nome host non mi ha mai impedito di fare nulla.
Muru,

1
@ H2ONaCl ah, ma la variabile HOSTNAME non è standard - trattino IIRC e ksh non ce l'hanno, zsh usa HOST, quindi per quanto riguarda le variabili shell, è il fondo dell'heap.
Muru,

3
Funziona ancora in Ubuntu 18.04 LTS.
Luca M

63

Senza riavvio

Modifica del nome host o del nome computer in ubuntu senza riavvio

Modifica / etc / hostname e passa al nuovo valore,

nano /etc/hostname 

Modifica / etc / hosts e cambia la vecchia riga 127.0.1.1 con il tuo nuovo nome host

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

Nota : l'ho letto su un forum> Modifica / etc / hosts e cambio la vecchia riga 127.0.1.1 con il tuo nuovo nome host (se non lo fai, non sarai più in grado di usare sudo. Se non l'hai già fatto , premi ESC dal menu di grub, scegli ripristino e modifica il tuo file host con le impostazioni corrette)

Ora dopo un riavvio, il nome host sarà quello nuovo che hai scelto

Senza riavvio

Per cambiare senza riavviare , puoi semplicemente usare hostname.sh dopo aver modificato / etc / hostname. È necessario mantenere entrambi i nomi host in / etc / hosts (127.0.0.1 newhost oldhost) fino a quando non si esegue il comando seguente:

sudo service hostname start

Nota : sopra il comando per rendere attiva la modifica. Il nome host salvato in questo file (/ etc / hostname) verrà conservato al riavvio del sistema (e verrà impostato utilizzando lo stesso servizio).


Su Ubuntu 12.10, l'ultima parte non funziona con il seguente messaggio di errore sudo: unable to resolve host old-hostname. Per quella parte, la soluzione @jesperado funziona bene.
Frédéric Grosshans,

3
Se non aggiorni /etc/hosts, le cose mant iniziano a fallire su 12.04.2 LTS, incluso il wcomando, Apache /sbin/reboote molto altro. Assicurati di aggiornare/etc/hosts
Josh

Ti riferisci a sia 127.0.0.1per localhostche 127.0.1.1per un nome host personalizzato. Giusto? Quindi, verso la fine della tua risposta, per un'azione senza ribellione , fai riferimento /etc/hostse 127.0.0.1 newhost oldhost. Quindi, non è necessario un 127.0.1.1indirizzo?
Nikos Alexandris,

1
non ha funzionato per me. ho dovuto usare sudo nano /etc/hostsper rendere effettiva la modifica; senza sudo, nano /etc/hostsnon ho salvato la modifica
conman253

2
Qual è la differenza tra riavvio e riavvio?
tempesta

43

Il nome predefinito è stato impostato durante l'installazione di Ubuntu. Puoi facilmente cambiarlo come vuoi in Desktop e Server modificando i file host e hostname. Di seguito è riportato come:

  1. Premere CtrlAlttsulla tastiera per aprire il terminale. All'apertura, esegui il comando seguente:sudo hostname NEW_NAME_HERE

Questo cambierà il nome host fino al prossimo riavvio. La modifica non sarà immediatamente visibile nel tuo attuale terminale. Avviare un nuovo terminale per vedere il nuovo nome host.

  1. Per modificare il nome in modo permanente, eseguire il comando per modificare i file host:

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

Per Ubuntu server senza interfaccia grafica, eseguire sudo vi /etc/hostnamee sudo vi /etc/hostse modificare uno per uno. In entrambi i file, cambia il nome nel modo desiderato e salvali.

Infine, riavvia il computer per applicare le modifiche.


16

Ecco uno script che modifica il nome host nel modo prescritto. Assicura che non solo sudoma anche le applicazioni X11 continuino a funzionare senza il riavvio richiesto.

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

Cosa fa l'ultima riga dello script su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"? Solo curioso.
Fr0zenFir

4
@ Fr0zenFyr: richiede un token di autenticazione X11 valido ( xauth list) e sostituisce il vecchio nome host con il nuovo nome host ( sed). Quindi awkinserisce le virgolette attorno al primo argomento xauth addperché xauthil formato di input e output non è simmetrico.
Lucas,

Grazie per la spiegazione. Ho sempre riavviato per rendere effettive le modifiche. +1
Fr0zenFir

@trakz: In realtà 127.abc qualunque sia il numero, è tutto localhost secondo IETF RFC. (la maggior parte delle persone non lo sa, ma come la maggior parte non lo fa, modifica approvata)
Fabby

14

Senza riavvio:

  1. cambia il nome host in /etc/hostname
  2. aggiornare di /etc/hostsconseguenza
  3. sudo sysctl kernel.hostname=mynew.local.host

Controlla il tuo nome host attuale con hostname -f


Con 16.04, sysctl sudo: unable to resolve host oldname, sysctl: setting key "kernel.hostname": Read-only file system. Forse perché è un CT all'interno di Proxmox.
Pablo A

14

Persistenza del nome host Cloud-init (Ubuntu 18+)

Mentre gli approcci di cui sopra ( hostnamectl, etc/hostname, ecc) lavorare per il cambiamento hostname immediato, con l'avvento del cloud-init - che può controllare l'impostazione del nome host - ad ignorarti molte altre cose. Quindi non si attaccherà dopo un riavvio se è installato cloud-init. Se si desidera che la modifica rimanga dopo un riavvio, è necessario modificare i file di configurazione cloud-init , disabilitare il modulo set / aggiornamento nome host cloud-init :

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

o disabilita completamente cloud-init:

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

1
Per favore, vota questa risposta. Questo ha funzionato alla grande per me. Altre risposte non funzionano con l'adozione di cloud-init.
nslntmnx,

@nslntmnx viene installato di default sul desktop 18.04, solo server? Il desktop non ha /etc/cloud/cloud.cfg. Qual è il nome del pacchetto? Giusto cloud-init?
Ciro Santilli 30 改造 中心 法轮功 六四 事件

1
Inoltre, c'è un modo per cambiare il nome host con cloud-init invece di disabilitare la sua sostituzione?
Ciro Santilli 30 改造 中心 法轮功 六四 事件

1
Sì, puoi modificare molte impostazioni usando cloud-init - vedi il link dei documenti nella mia risposta - ecco un link per impostare il nome host: cloudinit.readthedocs.io/it/latest/topics/…
Pierz

7

Per ottenere il tuo nome host attuale:

cat /etc/hostname

Questo può essere modificato in qualsiasi editor di testo. Dovresti anche aggiornare la voce diversa da localhost rispetto a 127.0.0.1 in / etc / hosts.


1
Oppure esegui semplicemente il comando "nomehost" dalla riga di comando.
elomage

4
  1. Sostituisci il contenuto /etc/hostnamecon il nome host desiderato (puoi modificarlo con sudo nano /etc/hostname)
  2. In /etc/hosts, sostituisci la voce accanto a 127.0. 1 .1 con il nome host desiderato (è possibile modificare con sudo nano /etc/hosts)
  3. Eseguire sudo service hostname restart; sudo service networking restart

Attenzione: non funzionerà con Ubuntu 18+ che esegue cloud-init per impostazione predefinita, che controlla il nome host all'avvio.
nslntmnx,

@nslntmnx ne sei sicuro? Vedo nel cloud-config.txt al # 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.momento non ho Ubuntu 18, quindi non posso provarlo fino al fine settimana.
George,

4

Ubuntu 16.04

Questo è senza riavvio e senza alcun utilizzo del terminale.

  • Vai a Impostazioni di sistema -> Dettagli .
  • Eccolo. Accanto al nome del dispositivo , c'è una casella di testo.
  • Modifica la casella di testo e chiudi la finestra.

Terminale aperto Guardate voi stessi.

(Per le versioni precedenti, la casella di testo non è modificabile.)


4

La risposta classica alla domanda del poster originale è che, una volta modificata /etc/hostname, la fai applicare senza riavviare eseguendo hostname (1) con l' opzione -F( --file) come root:

sudo hostname -F /etc/hostname

Il nome host (5) che gestisce /etc/hostnamee il suddetto programma è stato lo stesso in Debian e suoi derivati ​​da oltre vent'anni e il pacchetto che lo ha fornito è stato etichettato essenziale e richiesto , e IIRC gli script init hanno letteralmente usato la stessa cosa per decenni ( /etc/init/hostname.conflo contiene ancora), quindi devo dire che sono sinceramente perplesso sul fatto che nessuno lo abbia già menzionato :)


Attenzione: non funzionerà con Ubuntu 18+ che esegue cloud-init per impostazione predefinita, che controlla il nome host all'avvio.
nslntmnx,

@nslntmnx erm, che cosa? Quale nuova dipendenza introdotta da Ubuntu 18 per inserire cloud-init di default? Potresti pensare ad alcune immagini su misura del cloud, nel qual caso non dovrebbe sorprendere che eseguano strumenti di provisioning cloud personalizzati.
Josip Rodin,

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

Questo dovrebbe fare il lavoro, penso


5
Non credo che questo sopravviverà al riavvio
Collin Anderson,

Attenzione: non funzionerà con Ubuntu 18+ che esegue cloud-init per impostazione predefinita, che controlla il nome host all'avvio.
nslntmnx,

3

Ho letto le risposte, ma penso che probabilmente stai cercando questo:

Basta eseguire questi due comandi dopo aver modificato il /etc/hostnamefile.

$ sudo service hostname restart
$ exec bash

È tutto. Non è necessario riavviare. Assicurarsi inoltre di modificare anche il nome nel /etc/hostsfile.


A differenza di molte altre risposte, questo non si aggiorna /etc/hosts(ho confermato il 14.04).
IsaacS

Attenzione: non funzionerà con Ubuntu 18+ che esegue cloud-init per impostazione predefinita, che controlla il nome host all'avvio.
nslntmnx,

2

Ubuntu 16.04

Soluzione basata sulla risposta della DigitalOcean Comunity.

Modifica il file hosts .

$ sudo nano /etc/hosts

Sostituisci il vecchio nome con uno nuovo.

127.0.0.1 localhost newname

Imposta un nuovo nome host.

$ sudo hostnamectl set-hostname newname


Attenzione: non funzionerà con Ubuntu 18+ che esegue cloud-init per impostazione predefinita, che controlla il nome host all'avvio.
nslntmnx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.