Comando hostnamectl in Linux: verificare e cambiare il nome host

hostnamectl mostra il nome host e informazioni su sistema operativo, kernel e architettura nei sistemi con systemd. Permette anche di cambiare il nome con set-hostname, senza aggiornare automaticamente DNS o /etc/hosts.

Il nome statico è configurato dall’amministratore e normalmente conservato in /etc/hostname. Il nome transitorio è un valore di ripiego, per esempio ricevuto dalla configurazione di rete: se esiste un nome statico valido, systemd dà priorità a quello. Il nome pretty è una descrizione leggibile dalle persone, che può contenere spazi e caratteri speciali.

Sintassi di base

hostnamectl [opzioni] [comando] [argomenti]

Le parentesi indicano elementi facoltativi e non vanno digitate. Questi esempi si eseguono in un terminale del sistema da gestire; in SSH riguardano il server remoto. Servono il comando installato e l’accesso al servizio systemd-hostnamed tramite il bus di sistema. Un container minimale o un sistema senza i servizi systemd necessari può non supportarli.

Controlla hostnamectl --version, hostnamectl --help e man hostnamectl localmente. Da systemd 249 è disponibile anche hostnamectl hostname NOME; nel sorgente attuale set-hostname resta un alias storico. Gli esempi mantengono questa forma, da verificare sulla versione installata.

Esempi pratici

Nome attuale e informazioni di sistema

hostnamectl status

Controlla nome statico, sistema operativo, kernel e architettura. I campi dipendono dall’ambiente e dalla versione; nome transitorio e pretty possono non comparire separatamente quando coincidono con quello statico. Non interpretare l’assenza di una riga come prova di un errore.

Leggere solo il nome statico

hostnamectl --static

Senza un comando esplicito, status è implicito; questa opzione seleziona il solo nome statico nell’output testuale. Per controllare gli altri nomi puoi usare separatamente hostnamectl --transient e hostnamectl --pretty.

Cambiare il nome host

Prima di procedere verifica che sia la macchina corretta e annota tutti e tre i nomi con le interrogazioni precedenti, compresi eventuali valori vuoti. Esegui la modifica solo su un sistema che amministri, dopo aver verificato le dipendenze dei servizi. Il nome seguente è dimostrativo: sostituiscilo con quello concordato per la tua macchina.

sudo hostnamectl set-hostname web01.example.test

Senza selettori questo comando cambia i nomi statico, transitorio e pretty, non soltanto quello statico. Per limitare una modifica usa il selettore corrispondente, per esempio sudo hostnamectl --static set-hostname web01.example.test. La modifica richiede autorizzazione; sudo presuppone che l’utente sia abilitato. Non serve per le normali interrogazioni di sola lettura.

Verificare il risultato e la portata della modifica

Una modifica riuscita può non produrre testo: il silenzio da solo non basta. Controlla subito lo stato di uscita con echo $? prima di eseguire altri comandi: zero indica successo, un valore diverso indica errore. Poi interroga nuovamente il nome statico:

hostnamectl --static

Output illustrativo dopo l’impostazione dell’esempio, non risultato misurato in questa guida:

web01.example.test

Verifica anche hostnamectl status e gli altri nomi se li hai modificati. Il nome non crea un record nel Domain Name System (DNS), né aggiorna da solo /etc/hosts, certificati o configurazioni applicative. Un test di risoluzione come getent hosts web01.example.test, se disponibile, interroga le fonti configurate sul sistema: non prova da solo che il DNS pubblico sia aggiornato.

Comandi e opzioni principali

Comando o opzione Effetto
status Mostra nome host e informazioni sul sistema; è il comando predefinito.
--static Seleziona il nome statico per l’interrogazione testuale o la modifica.
--transient Seleziona il nome transitorio, usato come ripiego in assenza di un nome statico valido.
set-hostname nome Imposta il nome; senza selettori modifica tutti e tre i tipi.
--pretty Seleziona il nome descrittivo per le persone, distinto dal nome usato in rete.

Precauzioni e ripristino

Prima di cambiare un server, controlla DNS, certificati, monitoraggio, applicazioni e /etc/hosts. Per i nomi statici e transitori usa etichette DNS valide, in minuscolo, senza spazi, per un massimo complessivo di 64 caratteri. systemd accetta anche un nome completo con punti, come nell’esempio, ma raccomanda normalmente un nome locale composto da una sola etichetta.

Per tornare indietro ripristina ogni tipo modificato con il rispettivo selettore e il valore annotato: sudo hostnamectl --static set-hostname 'VALORE_PRECEDENTE', poi analogamente --transient e --pretty se necessario. Sostituisci il segnaposto, mantenendo le virgolette per un nome pretty con spazi. Un valore prima vuoto richiede una stringa vuota, '', per azzerare quella configurazione. Reimpostare indiscriminatamente un unico vecchio nome non ricrea tre valori originariamente diversi.

Dopo il ripristino ricontrolla i nomi e le dipendenze esterne modificate separatamente. Se una configurazione di rete o di provisioning impone un nome, individua anche quella sorgente: una modifica locale può essere sovrascritta in seguito. Gli errori di collegamento al bus o di autorizzazione vanno risolti verificando ambiente, servizio e permessi, senza considerarli conferme di una modifica riuscita.

In questo ambiente Windows con Git Bash hostnamectl non è disponibile. Sono state controllate la sintassi shell dei comandi e la documentazione ufficiale; non è stato eseguito alcun cambio di nome né verificato il funzionamento di systemd, D-Bus o dell’autorizzazione.

Domande frequenti

Se cambio il nome con hostnamectl, cambia anche il DNS?

No. Il nome locale e i record DNS sono configurazioni distinte. Aggiorna i record necessari con gli strumenti del servizio DNS e verifica separatamente la risoluzione dai sistemi che devono raggiungere il server.

Documentazione ufficiale

Consulta il manuale ufficiale di hostnamectl per comandi e selettori, e la documentazione di hostname per persistenza e priorità dei nomi. L’alias storico è visibile nel sorgente ufficiale di hostnamectl.