Warum funktioniert "Hostname --fqdn" auf meinem Ubuntu-Computer nicht?


10

Ich verwende Ubuntu 10.04 LTS und wenn ich den Befehl eingebe, hostname --fqdnerhalte ich die folgende Meldung : hostname: Name or service not known.

Aus diesem Grund kann ich nicht globalerfolgreich installieren und erhalte beim Versuch den folgenden Fehler:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mein /etc/nsswitch.confist unten.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Hat jemand eine Idee, was dies bedeutet und wie ich das beheben kann?


1
Warum möchten Sie einen FQDN? Wenn Sie fragen müssen, möchten Sie wahrscheinlich keinen oder können nicht einen oder beide verwenden.
Msw

Antworten:


11

Können Sie den Inhalt von bereitstellen /etc/nsswitch.conf?

Es sieht so aus, als hätte /etc/nsswitch.conf einen schlechten Wert für die Zeile "hosts". Beginnt es mit "Dateien"?

Andernfalls wird der FQDN festgelegt, indem Sie / etc / hosts bearbeiten und den FQDN in die Zeile setzen, in der der Hostname angezeigt wird. Angenommen, Sie haben einen Hostnamen "foo" und finden eine Zeile:

127.0.0.1 foo

Sie würden es so bearbeiten:

127.0.0.1 foo.localdomain foo

foo.localdomain wäre dein neuer FQDN.


Ich habe den Inhalt dieser Datei aufgenommen, wie Sie gefragt haben! Danke für die Antwort!! :)
RadiantHex

@ Rapael Ich habe die Datei / etc / hosts geändert, aber es kam zu einem vorübergehenden Fehler bei der Namensauflösung. Irgendwelche Ideen, warum es passiert?
Muhammad Adeel Zahid

6

Bearbeiten Sie / etc / hosts, um Ihren vollqualifizierten Domänennamen hinzuzufügen

Informationen zur Syntax finden Sie hier: http://www.faqs.org/docs/securing/chap9sec95.html

Update: Wenn Sie Ihre Frage noch einmal durchlesen, klingt es fast so, als hätten Sie entweder Ihren Pfad nicht richtig eingestellt oder es stimmt etwas mit dem Hostnamen-Programm nicht.

mache 'welchen Hostnamen'

Es sollte mit dem Pfad '/ bin / hostname' zurückkehren.

Wenn das funktioniert, versuchen Sie den Befehl erneut wie folgt:

'/ bin / hostname --fqdn'


Vielen Dank!!! Entschuldigung, wenn ich das frage, aber wie finde ich meinen FQDN heraus?
RadiantHex

1
Nun, dies steht für "Fully Qualified Domain Name". Superuser.com ist ein vollqualifizierter Domänenname. Wenn Sie eine Domain besitzen, können Sie sie verwenden, andernfalls können Sie sich etwas ausdenken, wenn Sie sich in einem internen Netzwerk befinden.
Mudfly

1
Danke @Mudfly! Ich habe Ihre Anweisungen ausprobiert, der letzte Befehl gibt erneut "Hostname: Name oder Dienst nicht bekannt" zurück!
RadiantHex

Ohne weitere Informationen ist es schwierig, die Bedingungen Ihres Problems zu kennen. EG: Ist dies eine lokale Installation, sind Sie über ssh angemeldet, verwenden Sie ein Benutzerkonto oder sind Sie im Stammverzeichnis angemeldet? Vielleicht möchten Sie ubuntuforums.org besuchen und nach anderen suchen, die ähnliche Probleme gelöst haben.
Mudfly

1
Dies ist hier ein wilder Sprung, aber Ubuntu bevorzugt die Verwendung von sudo gegenüber der Verwendung von root. Es ist durchaus möglich, dass die Shell nicht richtig eingerichtet ist. Dies zu testen ist sehr einfach. Erstens können Sie 'ls -al / root /' ausführen und sehen, ob Sie eine .bashrc sehen können. Zweitens, wenn Sie keine .bashrc-Kopie von Skel 'cp /etc/skel/.bashrc ./' haben, können Sie dies tun Dies gilt auch dann, wenn Sie die Datei bereits haben. Drittens machen Sie '/ bin / bash', um sicherzustellen, dass Sie bash ausführen. Versuchen Sie schließlich Ihren ursprünglichen Befehl erneut. Sie sollten in einer vollständig konfigurierten Bash-Shell ausgeführt werden.
Mudfly

0

Im Gegensatz zum einfachen hostnameBefehlsaufruf 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 --verboseOption.

Kurz gesagt, alles andere als ein einfaches hostnamemacht 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 --fqdnstattdessen das.

Die Fehlermeldung hostname: Name or service not knownstammt 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.confRegel 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 dnsin dieser Reihenfolge, dann c) sogar Wenn Sie DNS in Ihrer Umgebung nicht gut konfiguriert haben, hostname --fqdnsollte 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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.