Der Linux-Hostname -f-Befehl funktioniert nicht auf RHEL

13

Ich verwende einen RHEL 5.7 und der hostnameBefehl gibt mir den korrekten Hostnamen.
Aber hostname -sund hostname -fzurück: Unknown host. Warum?

redoc
quelle
Welche Distribution? Auf meinem Ubuntu 12.04 System funktionieren alle 3.
Anthon
Welches Betriebssystem verwenden Sie? Wenn Linux, welche Distribution? Was ist der Inhalt von /etc/hostname?
Terdon
1
hostname -fverwendet DNS, haben Sie einen umgekehrten DNS-Eintrag für Ihre IP?
Barmar
@terdon Ich verwende RHEL5 (Red Hat Enterprise Linux Server Release 5.7 (Tikanga)) und es gibt keine solche Datei (/ etc / hostname)
redoc
@Barmar Ich habe die DNS nicht auf meinem Host konfiguriert. Ich habe die IP-Adresse und FQDN in meine Hosts-Datei (/ etc / hosts) eingefügt. Dieser Fehler ist darauf zurückzuführen, dass DNS nicht konfiguriert wurde.
Redoc

Antworten:

21

(kopiert von einer meiner Antworten auf SF )

Der hostnameBefehl gibt Ergebnisse von DNS und zurück /etc/hosts.

hostnameist gleichbedeutend mit uname -nund ist der tatsächliche "Hostname" oder "Knotenname" der Box.
Alle anderen hostnameArgumente verwenden diesen Knotennamen, um Informationen nachzuschlagen.

Bevor ich weiter gehe, sollte ich das /etc/hostsDateiformat 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.confdieser Methode konfiguriert haben, wird variieren.

  • Wenn Sie es für die Verwendung /etc/resolv.confvon 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/hostseiner 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 -afunktioniert 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/hostswie 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
Patrick
quelle
Die Erklärung, wie es zu dem Wert kommt, ist großartig! Ich hatte meinen FQDN am Ende der 127.0.0.1-Zeile, die als primären Hostnamen localhost hatte. Ich habe sie gerade gelöscht und den vollqualifizierten Domänennamen nur in der Leitung mit der tatsächlichen IP-Adresse belassen. Dadurch wurde das Problem behoben, dass der Hostname -f localhost zurückgibt.
Qwertzguy