Im Gegensatz zur Bearbeitung von / etc / hostname oder wo immer dies relevant ist?
Es muss einen guten Grund geben (hoffe ich) - im Allgemeinen bevorzuge ich den "alten" Weg, bei dem alles eine Textdatei war. Ich versuche nicht, umstritten zu sein - ich möchte es wirklich gerne wissen und selbst entscheiden, ob es ein guter Grund ist. Vielen Dank.
Antworten:
Hintergrund
hostnamectl
ist Teil von systemd und bietet eine geeignete API, um die Hostnamen eines Servers auf standardisierte Weise festzulegen.Zuvor hatte jede Distribution, die systemd nicht verwendete, ihre eigenen Methoden, was zu einer Menge unnötiger Komplexität führte.
hostnamectl
Außerdem werden viele unterschiedliche Daten an einem einzigen Speicherort zusammengeführt, um zu booten:Die Informationen hier herkommt
/etc/*release
,uname -a
usw. , einschließlich dem Hostnamen des Servers.Was ist mit den Dateien?
Übrigens ist alles noch in Dateien,
hostnamectl
es vereinfacht nur, wie wir mit diesen Dateien interagieren müssen oder wo sie sich befinden.Als Beweis dafür können Sie
strace -s 2000 hostnamectl
sehen, aus welchen Dateien sie stammen:systemd-hostname.service?
Für den scharfsinnigen Beobachter sollten Sie oben feststellen,
strace
dass nicht alle Dateien vorhanden sind.hostnamectl
interagiert tatsächlich mit einem Dienst,systemd-hostnamectl.service
der in der Tat die "Interaktion" mit den meisten Dateien ausführt, mit denen die meisten Administratoren vertraut wären, wie z/etc/hostname
.Wenn Sie ausgeführt werden, erhalten
hostnamectl
Sie daher Details vom Dienst. Dies ist ein On-Demand-Dienst, sodass Sie nicht sehen können, ob er ständig ausgeführt wird. Nur wennhostnamectl
läuft. Sie können es sehen, wenn Sie einenwatch
Befehl ausführen und dannhostnamectl
mehrmals starten :Die Quelle dafür ist hier: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c und wenn Sie es durchsehen, sehen Sie die Verweise auf
/etc/hostname
usw.Verweise
quelle
-e open,openat
?strace
8-).grep
Um ehrlich zu sein, hätte ich das trotzdem gebraucht , um die Ausgabe so zu bekommen, wie ich es zeigen wollte. Übrigensstrace
hätte ich die Ausgabe deshostnamectl
cmd immer noch gezeigt , also war mein Weg kürzer.rpm -qf $(type -P hostnamectl)
ich mich erinnern muss!Es ist immer noch eine Textdatei, Sie können sie immer noch bearbeiten, und es wird kein Problem geben.
Die Textdatei wurde auf standardisiert
/etc/hostname
.Nach Angaben des Betreuers wurden die Dienste systemd-hostname, systemd-timed etc in hohem Maße für vorhandene GUI (s) wie GNOME entwickelt. Mit systemd-hostnamed kann eine GUI-Anforderung Hostnamen ändern, ohne als Root ausgeführt zu werden (abhängig von der Polkit-Richtlinie). Dbus bietet auch eine Methode zum Abonnieren von Änderungen, die für die Anforderungen der Benutzeroberfläche geeignet ist. Vielleicht von insgesamt einer App in diesen Fällen genutzt :). Ich weiß nicht, vielleicht verwenden Uhren systemd-timedated, um auf die Neukonfiguration der Zeitzone zu warten?
Stellen Sie sich hostnamectl als einen Stub vor, um das GUI-Backend auszuführen, das möglicherweise auch ein nützliches CLI-Dienstprogramm ist oder nicht. systemd-hostnamed ist speziell nicht dazu gedacht, ganze Funktionen hinzuzufügen, die nicht vom GUI-Code ausgeführt werden.
Der von systemd gehostete Dienst soll nicht über Unterschiede zwischen Distributionen abstrahieren. Upstream-System standardisiert auf einer einzigen Konfigurationsdatei
/etc/hostname
, wo es zuvor verschiedene Konfigurationsdateien auf zB Debian vs Redhat-basierten Distributionen gab.Dies setzt voraus, dass hostnamectl mit der Standardimplementierung von systemd-hostnamed spricht. Aber AFAIK gibt es keine aktuelle Distribution, die den verwendeten Dateinamen korrigiert.
Ich möchte darauf hinweisen, dass das Laden
/etc/hostname
beim Booten frühzeitig von systemd PID 1 durchgeführt wird. Es kommt nicht darauf an, systemd-hostnamed auszuführen.Ich stelle mir vor, Sie könnten einen harmlosen Unterschied bemerken, wenn Sie eine GUI für Systemeinstellungen geöffnet haben und gleichzeitig den Hostnamen anzeigen. Wenn Sie die Änderung bearbeiten
/etc/hostname
und dann verwendenhostname --file /etc/hostname
, um sie auf das laufende System anzuwenden, wird die GUI-Anzeige möglicherweise nicht sofort aktualisiert. systemd-hostnamed bietet dbus-Benachrichtigungen bei Änderungen an allen Versionen des von ihm verwalteten Hostnamens, sodass die Benutzeroberfläche möglicherweise nicht auf die System-Hostnamen-Benachrichtigungen warten muss, die in modernen Linux-Kerneln bereitgestellt werden.(Normalerweise ist es eine schlechte Idee, den Hostnamen zur Laufzeit zu ändern . Dies kann zu Problemen mit Software wie X führen . Ich bin sicher, dass dieses Problem von systemd nicht behoben wird . Vielleicht wurde es von Distributionen behoben, die systemd verwenden.) .
quelle