Das ist ziemlich rätselhaft. Weiß jemand, wo der hostname
Befehl Hostnamen speichert und liest?
Ich dachte, es wäre / etc / hostname, aber auf diesem Linux-System gibt es keine solche Datei, die ich verwende. Ich habe versucht, mithilfe von strace herauszufinden, wo es sich befindet, aber keine Leseaufrufe haben diese Informationen zurückgegeben:
$ strace hostname 2>&1 | grep read
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340^\0\0\0\0\0\0"..., 832) = 832
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\30\2\0\0\0\0\0"..., 832) = 832
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\16\0\0\0\0\0\0"..., 832) = 832
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 248
read(3, "", 1024) = 0
Dann bemerkte ich, dass uname syscall diese Information zurückgab:
uname({sys="Linux", node="server-name", ...}) = 0
Ein rekursives grep in / etc / gibt nichts zurück:
grep "server-name" -r /etc
Wo speichert uname diese Informationen? Nur zur Erinnerung?
Antworten:
Schauen Sie sich diese verwandten Fragen und Antworten zu U & L mit dem Titel: Woher bezieht uname seine Informationen? . Informationen wie der Hostname bleiben in einer Datenstruktur im Linux-Kernel erhalten, während das System ausgeführt wird. Während des Systemstarts können diese Informationen über eine Vielzahl von Mechanismen wiederhergestellt werden, die in der Regel distro-spezifisch sind.
Wenn Sie sich die
man 2 uname
Manpage ansehen, wird dort eine Datenstruktur erwähnt:Das zweite Element dieser Struktur
nodename[]
ist ein Ort, an dem der Hostname im Linux-Kernel gespeichert ist./ proc
Wenn Sie sich das ansehen
/proc/sys/kernel/hostname
, wird auch hier der Hostname angezeigt. Dies ist ein virtueller Speicherort, der/proc
Ihnen jedoch eine alternative Methode für den Zugriff auf den Hostnamen bietet. Der Domainname des Systems ist auch hier/proc/sys/kernel/domainname
.HINWEIS: Interessanterweise sind diese Werte spezifisch für den UTS-Namespace .
Beispiel
Bearbeiten des Hostnamens
Auf Systemen mit Systemd können Sie das CLI-Tool verwenden
hostnamectl
, um den Hostnamen abzurufen / festzulegen. Dadurch wird es zwischen Neustarts dauerhaft geändert.Sie können den Wert auch herausfinden, indem Sie
sysctl
:In diesen Fragen und Antworten zu Fedora-Releases unter ask.fedoraproject.org wird das Thema ausführlich behandelt. Der Titel lautet: Richtiges Festlegen des Hostnamens - Fedora 20 auf Amazon EC2 .
quelle
Der
hostname
Befehl speichert den Namen nur im Kernel-Speicher.Wie das System beim Booten entscheidet, wie sein Name lautet, hängt davon ab, wie das System konfiguriert ist. Die Optionen reichen vom Lesen eines Namens aus einer Datei bis zur Verwendung von DNS oder / etc / hosts, um den Namen festzulegen, nachdem eine geeignete Netzwerkschnittstelle aufgerufen wurde.
quelle
/etc/hosts
(was für DNS-Lookups ist - ein System, das seinen Hostnamen von dort liest, ist ach so falsch) ... aber möglicherweise/etc/hostname
(enthält den vollständig qualifizierten Namen) oder selten/etc/sysconfig/network
(enthält möglicherweise einenHOSTNAME=...
Shell-Befehl). Auf einer amazon EC2-Instanz müssen Sie möglicherweise auch Änderungen vornehmen/etc/cloud/cloud.cfg
...hostname(1)
ist nur ein Front-End für densethostname(3)
Systemaufruf, der im Grunde den Hostnamen dahin schreibt, wo der Kernel erwartet, dass er gespeichert wird.Wenn die Änderung dauerhaft sein soll, müssen Sie sie gemäß der allgemeinen Unix-Philosophie selbst speichern. Die genaue Position hängt jedoch stark von Ihrem Init-System ab. Zum Beispiel liest OpenBSDs init den Hostnamen von
/etc/myname
(währendnetstart
).All dies sollte in den Manpages Ihres Systems oder in der zugehörigen Dokumentation beschrieben werden.
quelle
Als langjähriger * nix-Sysadmin werde ich das Offensichtliche ohne direkten RTFM-Verweis angeben: :)
Dies gilt für die meisten Linux-Distributionen.
--mem
quelle
Zur Laufzeit wird es im Speicher abgelegt, wie die anderen hier bereits geantwortet haben.
Um einen Neustart zu überstehen, muss er in einer Datei gespeichert werden, die für die jeweilige Linux-Distribution spezifisch ist. Auf meinem Fedora 20 ist es / etc / hostname
Es ist höchstwahrscheinlich in / etc gespeichert. Versuchen Sie, in etc. Nach dem tatsächlichen Hostnamen zu suchen
quelle
hostnamectl
etc .: ask.fedoraproject.org/en/question/37413/…