(kopiert von einer meiner Antworten auf SF )
Der hostname
Befehl gibt Ergebnisse von DNS und zurück /etc/hosts
.
hostname
ist gleichbedeutend mit uname -n
und ist der tatsächliche "Hostname" oder "Knotenname" der Box.
Alle anderen hostname
Argumente verwenden diesen Knotennamen, um Informationen nachzuschlagen.
Bevor ich weiter gehe, sollte ich das /etc/hosts
Dateiformat erklären .
Das erste Feld ist ziemlich offensichtlich. Es ist die IP-Adresse, in die alle Hostnamen in der Zeile aufgelöst werden sollen. Das zweite Feld ist der primäre Hostname für diese IP. Die restlichen Felder sind Aliase.
Wenn Sie also ausführen hostname -f
, wird zuerst versucht, die IP für Ihren Knotennamen aufzulösen. Je nachdem, wie Sie den hosts:
Eintrag in /etc/nsswitch.conf
dieser Methode konfiguriert haben, wird variieren.
- Wenn Sie es für die Verwendung
/etc/resolv.conf
von DNS konfiguriert haben, verwendet es die in konfigurierten Suchdomänen, bis es eine IP-Adresse vom DNS zurückerhält.
- Wenn Sie es für die Verwendung von Dateien konfiguriert haben, sucht es in
/etc/hosts
einer Zeile, in der entweder der primäre Hostname oder der Aliasname Ihr aktueller Knotenname ( uname -n
) ist, und gibt dann die IP-Adresse in dieser Zeile zurück.
Sobald es die IP hat, versucht es eine umgekehrte Suche auf dieser IP. Auch hier wird DNS für diese und Ihre Hosts-Datei basierend auf Ihrer verwendet nsswitch.conf
. Wenn Sie Ihre hosts-Datei verwenden, wird der primäre Eintrag (das erste Feld nach der IP-Adresse in der Datei) zurückgegeben.
hostname -a
funktioniert nur mit der hosts-Datei, da eine umgekehrte Suche in DNS nur 1 Ergebnis liefert. Mit der hosts-Datei werden die Alises in der übereinstimmenden Zeile zurückgegeben (alles nach dem ersten Eintrag, dem primären Hostnamen).
Kurz gesagt, der wahrscheinliche Grund für Ihr Problem ist, dass Sie keinen Eintrag haben /etc/hosts
, der Ihren Hostnamen ( uname -n
) enthält.
Beispiele
Wenn Ihr Knotenname 'foobar' lautet und Sie einen Eintrag /etc/hosts
wie diesen haben:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
Dann erhalten Sie die folgenden Befehlsergebnisse:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost