Wie ändere ich den Hostnamen ohne Neustart?

497

Ich möchte den Hostnamen des Betriebssystems ändern, aber nicht neu starten.

Ich habe bearbeitet, /etc/hostnameaber es erfordert einen Neustart, um implementiert zu werden. Wie vermeide ich das?

Deepak Rajput
quelle
3
Warnung: Funktioniert nicht mit Ubuntu 18+, das standardmäßig cloud-init ausführt und den Hostnamen beim Booten steuert.
Nslntmnx
@nslntmnx, danke!
MiB

Antworten:

642

Es ist einfach. Klicken Sie einfach auf das Zahnradsymbol (in der oberen rechten Ecke des Bildschirms), öffnen Sie den Bildschirm "Über diesen Computer" (in dem Zahnradsymbol) und bearbeiten Sie den "Gerätenamen".

Oder verwenden Sie in einem Terminal den folgenden Befehl:

sudo hostname your-new-name

Dies setzt den Hostnamen auf Ihren neuen Namen, bis Sie neu starten. Siehe man hostnameund Wie ändere ich den Computernamen? Für weitere Informationen. Verwenden Sie nicht _in Ihrem Namen.

Hinweis

Nach einem Neustart werden Ihre Änderungen in /etc/hostnameverwendet, so dass Sie (wie in der Frage gesagt) weiterhin verwenden sollten

sudo -H gedit /etc/hostname

(oder einem anderen Editor), sodass diese Datei den Hostnamen enthält.

Um zu testen, ob die Datei korrekt eingerichtet ist, führen Sie Folgendes aus:

sudo service hostname start

Sie sollten auch /etc/hostsdie folgende Zeile bearbeiten und ändern:

127.0.1.1     your-old-hostname

so dass es jetzt Ihren neuen Hostnamen enthält. (Dies ist erforderlich, da sonst viele Befehle nicht mehr funktionieren.)

Jasperado
quelle
4
Ich möchte nicht neu starten
Deepak Rajput
23
Ich weiß. Aus diesem Grund sollten Sie den Befehl 'hostname' verwenden. Ich wollte nur klarstellen, dass der Befehl 'hostname' den Hostnamen nur ändert, bis Sie / crash / etc neu starten. Danach liest es den Namen erneut aus der Datei.
Jasperado
5
Hängt davon ab. Wenn Sie den Befehl eingegeben haben, müssen Sie nicht neu starten. Der Hostname wurde bereits geändert. Aber nur bis zum nächsten Neustart.
Jasperado
19
Beachten Sie, dass Sie auch das ändern müssen /etc/hosts(siehe andere Antworten)
JB.
9
Kurz gesagt, obwohl hostnameder neue Name sofort wirksam wird, ist er nicht "permanent", es sei denn, Sie ändern ihn ebenfalls /etc/hostnameund /etc/hostsda dies die Dateien sind, die nach einem Neustart oder einem Absturz gelesen werden, ist dies möglicherweise nicht der Fall vorzeitig erwarten.
Tim Parenti
280

Ubuntu ab 13.04

Der hostnamectlBefehl ist Teil der Standardinstallation für Desktop- und Server-Editionen.

Es kombiniert das Einstellen des Hostnamens über den hostnameBefehl und das Bearbeiten /etc/hostname. Zusätzlich zum Festlegen des statischen Hostnamens kann der "hübsche" Hostname festgelegt werden, der in Ubuntu nicht verwendet wird. Die Bearbeitung /etc/hostsmuss leider noch separat erfolgen.

hostnamectl set-hostname new-hostname

Dieser Befehl ist Teil des systemd-servicesPakets (das ab Ubuntu 14.04 auch die Befehle timedatectlund enthält localectl). Während Ubuntu migriert, systemdist dieses Tool die Zukunft.

muru
quelle
1
Beachten Sie, dass dies nicht überall verfügbar ist. Hab gerade meine Ubuntu 14.04 LTS ARM-7 Installation angeschaut und hostnamectlexistiert nicht. Vermutlich verwenden einige Ubuntu-Varianten systemd noch nicht.
Stéphane
1
@ Stéphane Die Befehle sind Teil der systemd-Suite, stehen jedoch unabhängig voneinander zur Verfügung. In diesem Fall 13.04-14.10 nicht als init systemd verwenden, da der Befehl zur Verfügung steht.
muru
1
@ H2ONaCl Die Shell-Variable wird beim Start gesetzt. Öffnen Sie einfach eine andere Shell und die Hostname-Variable sollte in Ordnung sein. Was sudo betrifft, hat mich der Fehler bei der Auflösung des Hostnamens nie daran gehindert, irgendetwas zu tun.
muru
1
@ H2ONaCl ah, aber die Variable HOSTNAME ist nicht Standard - IIRC dash und ksh haben sie nicht, zsh verwendet HOST, was Shell-Variablen anbelangt, ist dies der untere Teil des Heaps.
muru
3
Funktioniert immer noch in Ubuntu 18.04 LTS.
LucaM,
63

Ohne Neustart

Ändern des Hostnamens oder Computernamens in Ubuntu ohne Neustart

Bearbeiten Sie / etc / hostname und ändern Sie den neuen Wert.

nano /etc/hostname 

Bearbeiten Sie / etc / hosts und ändern Sie die alte Zeile 127.0.1.1 in Ihren neuen Hostnamen

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

Hinweis : Ich habe es in einem Forum> Edit / etc / hosts gelesen und die alte Zeile 127.0.1.1 in Ihren neuen Hostnamen geändert. Wenn Sie dies nicht tun, können Sie sudo nicht mehr verwenden. Wenn Sie es bereits getan haben , drücke ESC im Grub-Menü, wähle "Recovery" und bearbeite deine Host-Datei mit den richtigen Einstellungen.)

Nach einem Neustart ist Ihr Hostname der neue, den Sie ausgewählt haben

Ohne Neustart

Zum Ändern ohne Neustart können Sie einfach hostname.sh verwenden, nachdem Sie / etc / hostname bearbeitet haben. Sie müssen beide Hostnamen in / etc / hosts (127.0.0.1 newhost oldhost) belassen, bis Sie den folgenden Befehl ausführen:

sudo service hostname start

Hinweis : Über dem Befehl, um die Änderung zu aktivieren. Der in dieser Datei gespeicherte Hostname (/ etc / hostname) bleibt beim Neustart des Systems erhalten (und wird mit demselben Dienst festgelegt).

Eine Null
quelle
Unter Ubuntu 12.10 funktioniert der letzte Teil mit der folgenden Fehlermeldung nicht sudo: unable to resolve host old-hostname. Für diesen Teil funktioniert die @ jesperado-Lösung gut.
Frédéric Grosshans
3
Wenn Sie nicht aktualisieren /etc/hosts, schlagen die Mant-Dinge in 12.04.2 LTS fehl, einschließlich wBefehl, Apache /sbin/rebootund vielem mehr. Achten Sie darauf, zu aktualisieren/etc/hosts
Josh
Sie beziehen sich sowohl 127.0.0.1für localhostals auch 127.0.1.1für einen benutzerdefinierten Hostnamen. Richtig? Gegen Ende Ihrer Antwort verweisen Sie für eine Aktion ohne Rebot auf /etc/hostsund 127.0.0.1 newhost oldhost. Sie brauchen also keine 127.0.1.1Adresse?
Nikos Alexandris
1
hat bei mir nicht funktioniert. Ich musste verwenden, sudo nano /etc/hostsdamit die Änderung wirksam wurde. ohne sudo nano /etc/hostshabe
ich
2
Was ist der Unterschied zwischen Neustart und Neustart?
Sturm
43

Der Standardname wurde bei der Installation von Ubuntu festgelegt. Sie können es auf einfache Weise in Desktop und Server beliebig ändern, indem Sie die Hosts und Hostnamensdateien bearbeiten. Im Folgenden erfahren Sie, wie:

  1. Drücken Sie CtrlAlttauf die Tastatur, um das Terminal zu öffnen. Führen Sie beim Öffnen den folgenden Befehl aus:sudo hostname NEW_NAME_HERE

Dadurch wird der Hostname bis zum nächsten Neustart geändert. Die Änderung ist in Ihrem aktuellen Terminal nicht sofort sichtbar. Starten Sie ein neues Terminal, um den neuen Hostnamen anzuzeigen.

  1. Führen Sie den folgenden Befehl aus, um den Namen dauerhaft zu ändern:

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

Für Ubuntu Server ohne GUI laufen sudo vi /etc/hostnameund sudo vi /etc/hostsund bearbeiten Sie sie eins nach dem anderen. Ändern Sie in beiden Dateien den Namen in den gewünschten Namen und speichern Sie sie.

Starten Sie schließlich Ihren Computer neu, um die Änderungen zu übernehmen.

Mohsen Gh.
quelle
16

Hier ist ein Skript, das den Hostnamen auf die vorgeschriebene Weise ändert. Es stellt sicher, dass nicht nur sudoX11-Anwendungen, sondern auch X11-Anwendungen ohne Neustart weiter funktionieren.

Verwendungszweck: 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}')"
Lucas
quelle
Was macht die letzte Zeile im Skript su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"? Nur neugierig.
Fr0zenFyr
4
@ Fr0zenFyr: Es benötigt ein gültiges X11-Authentifizierungstoken ( xauth list) und ersetzt den alten Hostnamen durch den neuen Hostnamen ( sed). Dann awkAnführungszeichen um das erste Argument legt auf , xauth addweil xauth‚s Ein- und Ausgabeformat ist nicht symmetrisch.
Lucas
Danke für die Erklärung. Ich hatte immer einen Neustart durchgeführt, damit die Änderungen wirksam wurden. +1
Fr0zenFyr
@trakz: Tatsächlich ist 127.abc, unabhängig von der Nummer, alles localhost gemäß IETF-RFC. (Die meisten Leute wissen das einfach nicht, aber wie die meisten nicht, bearbeiten genehmigt)
Fabby
14

Ohne Neustart:

  1. Ändern Sie den Hostnamen in /etc/hostname
  2. aktualisieren /etc/hostsentsprechend
  3. sudo sysctl kernel.hostname=mynew.local.host

Überprüfen Sie Ihren aktuellen Hostnamen mit hostname -f

Tombart
quelle
Mit 16,04, Sysctl sudo: unable to resolve host oldname, sysctl: setting key "kernel.hostname": Read-only file system. Vielleicht ist da ein CT in Proxmox.
Pablo A
14

Persistenz des Hostnamens von Cloud-init (Ubuntu 18+)

Während die oben genannten Ansätze ( hostnamectl, etc/hostnameusw.) für eine sofortige Änderung des Hostnamens funktionieren, kann Cloud-init unter anderem die Einstellung des Hostnamens steuern. Es bleibt also nach einem Neustart nicht hängen, wenn cloud-init installiert ist. Wenn Sie möchten, dass die Änderung nach einem Neustart erhalten bleibt, müssen Sie die Konfigurationsdateien von cloud-init bearbeiten. Deaktivieren Sie das Hostnamen-Set / Update-Modul von cloud-init :

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

oder deaktiviere cloud-init komplett:

sudo touch /etc/cloud/cloud-init.disabled
Pierz
quelle
1
Bitte stimmen Sie dieser Antwort zu. Das hat bei mir super geklappt. Andere Antworten funktionieren mit der Einführung von Cloud-Init nicht.
Nslntmnx
@nslntmnx Wird es standardmäßig auf dem 18.04-Desktop installiert, nur auf dem Server? Desktop hat nicht /etc/cloud/cloud.cfg. Wie lautet der Paketname? Nur cloud-init?
Ciro Santilli新疆改造中心法轮功六四事件
1
Gibt es auch eine Möglichkeit, den Hostnamen mit cloud-init zu ändern, anstatt nur die Überschreibung zu deaktivieren?
Ciro Santilli新疆改造中心法轮功六四事件
1
Ja, Sie können viele Einstellungen mit cloud-init ändern - siehe den Link docs in meiner Antwort - hier ist ein Link zum Festlegen des Hostnamens: cloudinit.readthedocs.io/en/latest/topics/…
Pierz
7

So rufen Sie Ihren aktuellen Hostnamen ab:

cat /etc/hostname

Dies kann in jedem Texteditor geändert werden. Sie müssten auch einen anderen Eintrag als localhost gegen 127.0.0.1 in / etc / hosts aktualisieren.

tagMacher
quelle
1
Oder führen Sie einfach den Befehl "Hostname" in der Befehlszeile aus.
elomage
4
  1. Ersetzen Sie den Inhalt von /etc/hostnamedurch den gewünschten Hostnamen (Sie können ihn mit bearbeiten sudo nano /etc/hostname).
  2. In /etc/hosts, ersetzen Sie den Eintrag neben 127,0. 1 .1 mit dem gewünschten Hostnamen (Sie können mit bearbeiten sudo nano /etc/hosts)
  3. Ausführen sudo service hostname restart; sudo service networking restart
George
quelle
Warnung: Funktioniert nicht mit Ubuntu 18+, das standardmäßig cloud-init ausführt und den Hostnamen beim Booten steuert.
Nslntmnx
@nslntmnx Bist du dir da sicher? Ich sehe in der cloud-config.txt, dass # 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.ich derzeit kein Ubuntu 18 habe, so dass ich es erst am Wochenende testen kann.
George
4

Ubuntu 16.04

Dies ist ohne Neustart und ohne Terminalbenutzung.

  • Gehen Sie zu Systemeinstellungen -> Details .
  • Da ist es. Neben dem Gerätenamen befindet sich ein Textfeld.
  • Bearbeiten Sie das Textfeld und schließen Sie das Fenster.

Terminal öffnen. Überzeugen Sie sich selbst.

(Bei älteren Versionen kann das Textfeld nicht bearbeitet werden.)

Shonku
quelle
4

Die klassische Antwort auf die Frage des ursprünglichen Posters lautet, dass Sie nach dem Bearbeiten /etc/hostnamedie Anwendung ohne Neustart ausführen, indem Sie hostname (1) mit der Option -F( --file) als root ausführen:

sudo hostname -F /etc/hostname

Der Hostname (5) , der mit /etc/hostnameund mit dem genannten Programm umgeht , ist seit über zwanzig Jahren derselbe in Debian und seinen Derivaten, und das Paket, sofern es als wesentlich und erforderlich gekennzeichnet ist , und IIRC, die Init-Skripte, haben buchstäblich dasselbe verwendet Jahrzehnte ( /etc/init/hostname.confenthält es immer noch), also muss ich sagen, ich bin wirklich verwundert, wie niemand dies bereits erwähnt hatte :)

Josip Rodin
quelle
Warnung: Funktioniert nicht mit Ubuntu 18+, das standardmäßig cloud-init ausführt und den Hostnamen beim Booten steuert.
Nslntmnx
@nslntmnx ähm, was? Welche neue Abhängigkeit hat Ubuntu 18 eingeführt, um standardmäßig Cloud-Init zu laden? Möglicherweise denken Sie an einige Cloud-angepasste Images. In diesem Fall sollte es nicht überraschen, dass sie benutzerdefinierte Cloud-Bereitstellungstools ausführen.
Josip Rodin
3
sudo hostname your-new-name
sudo /etc/init.d/networking restart

Das sollte den Job machen, denke ich

OmarQunsul
quelle
5
Ich glaube nicht, dass dies einen Neustart überleben wird
Collin Anderson
Warnung: Funktioniert nicht mit Ubuntu 18+, das standardmäßig cloud-init ausführt und den Hostnamen beim Booten steuert.
Nslntmnx
3

Ich habe die Antworten gelesen, aber ich denke, wahrscheinlich suchen Sie danach:

Führen Sie einfach diese beiden Befehle aus, nachdem Sie die /etc/hostnameDatei bearbeitet haben .

$ sudo service hostname restart
$ exec bash

Das ist alles. Kein Neustart erforderlich. Stellen Sie auch sicher, dass Sie den Namen in der /etc/hostsDatei ändern .

Raman
quelle
Im Gegensatz zu vielen anderen Antworten wird dies nicht aktualisiert /etc/hosts(ich habe es am 14.04 bestätigt).
IsaacS
Warnung: Funktioniert nicht mit Ubuntu 18+, das standardmäßig cloud-init ausführt und den Hostnamen beim Booten steuert.
Nslntmnx
2

Ubuntu 16.04

Lösung basierend auf der Antwort der DigitalOcean Comunity.

Bearbeiten Sie die Hosts- Datei.

$ sudo nano /etc/hosts

Ersetzen Sie den alten Namen durch einen neuen.

127.0.0.1 localhost newname

Richten Sie einen neuen Hostnamen ein.

$ sudo hostnamectl set-hostname newname

Jekis
quelle
Warnung: Funktioniert nicht mit Ubuntu 18+, das standardmäßig cloud-init ausführt und den Hostnamen beim Booten steuert.
Nslntmnx