Im Gegensatz zum einfachen hostname
Befehlsaufruf versucht der Aufruf hostname --fqdn
, einige weitere Dinge zu tun, was häufig zu einigen DNS-Suchvorgängen führt.
Nehmen Sie zum Beispiel den folgenden (erfolgreichen) Aufruf (dies ist aus einer Red Hat-Box, aber ich würde mir vorstellen, dass es für Ubuntu dasselbe sein sollte):
# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com
Beachten Sie die sehr hilfreiche --verbose
Option.
Kurz gesagt, alles andere als ein einfaches hostname
macht wahrscheinlich mehr als Sie erwarten. Hier ist ein weiteres Beispiel:
# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3
Und um es abzurunden:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
Beachten Sie, dass der Hostname eines Systems (wie von gethostname zurückgegeben) ein nicht qualifizierter Hostname sein kann, z. B. nur 'myserver'. Aus diesem Grund verwendet das Programm, das Sie installieren möchten, hostname --fqdn
stattdessen das.
Die Fehlermeldung hostname: Name or service not known
stammt von den Resolver- Funktionen: Dies sind die Teile der Systembibliothek, die zwischen Namen und Adressen (normalerweise DNS-Namen und IP-Adressen) übersetzt werden.
Tatsächlich kann der Resolver mehr als nur DNS (und mehr als nur zwischen Hostnamen und IP-Adressen übersetzen). Sein Verhalten wird teilweise durch die Datei konfiguriert. In der /etc/nsswitch.conf
Regel wird Folgendes angezeigt, normalerweise in dieser Reihenfolge:
- 'Hosts' (unter Linux bedeutet das / etc / hosts)
- (manchmal) nscd (Name-Service-Caching-Daemon)
- 'dns'
(Beachten Sie, dass Sie auch einen Caching-DNS-Server wie dnsmasqd haben können --- für den oben genannten Punkt, der sich noch unter dem 'dns'-Mechanismus befindet).
Es sei darauf hingewiesen, dass Tools wie dig , host und das ehrwürdige nslookup dieser Reihenfolge nicht folgen. Sie sind explizit DNS-Abfragetools. Dies bedeutet, dass Sie, wenn Sie sich auf sie verlassen (z. B. in einem Skript), möglicherweise ein anderes Ergebnis erhalten als bei normalen Client-Programmen (die den System-Resolver verwenden). Verwenden Sie aus diesem Grund das Programm getent in Skripten, insbesondere wenn eine Caching-Komponente wie nscd ausgeführt wird.
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
Der Schlüssel zum Erfolg hier ist also, dass a) wenn Sie / etc / hosts gut mit einem Eintrag für Ihren eigenen Computer konfiguriert haben und b) Ihre /etc/nsswitch.conf die übliche Konfiguration hat - hosts: files dns
in dieser Reihenfolge, dann c) sogar Wenn Sie DNS in Ihrer Umgebung nicht gut konfiguriert haben, hostname --fqdn
sollte dies funktionieren.
In einem gut konfigurierten DNS wird erwartet, dass Sie eine "umgekehrte" Adresse (einen "PTR-Eintrag") haben, die den "kanonischen" Namen Ihres Servers angibt, und dieser Name sollte auch nachgeschlagen werden können (ein " Ein Datensatz "für IPv4).
Kurzfassung: hinzufügen --verbose
; es wird Sie auf das hinweisen, was Ihnen fehlt.
Ich hoffe, das hilft Ihnen zu verstehen, was los ist.