A differenza della semplice hostname
invocazione del comando, l'invocazione hostname --fqdn
tenterà di eseguire alcune altre operazioni, che spesso comporteranno alcune ricerche DNS.
Prendiamo ad esempio la seguente (riuscita) invocazione (proviene da una scatola di Red Hat, ma immagino che dovrebbe essere la stessa per Ubuntu):
# 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
Si noti la molto utile --verbose
opzione.
In breve, qualsiasi cosa diversa da una semplice hostname
sta probabilmente facendo più di quanto ti aspetti. Ecco un altro esempio:
# 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
E per finire:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
Si noti che il nome host di un sistema (come restituito da gethostname) può essere un nome host non qualificato, ad esempio solo "myserver". Questo è il motivo per cui il programma che si desidera installare utilizza hostname --fqdn
invece.
Il messaggio di errore hostname: Name or service not known
proviene dalle funzioni del resolver : queste sono le parti della libreria di sistema che traducono tra nomi e indirizzi (in genere nomi DNS e indirizzi IP).
In realtà, il resolver fa molto di più del semplice DNS (e più della semplice traduzione tra nomi host e indirizzi IP); il suo comportamento è in parte configurato dal file /etc/nsswitch.conf
e in genere consulterà quanto segue, in genere in questo ordine:
- 'hosts' (su Linux, il mezzo / etc / hosts)
- (a volte) nscd (demone di cache name-service)
- 'DNS'
(nota, puoi anche avere un server DNS di cache come dnsmasqd --- per il punto di cui sopra, che è ancora sotto il meccanismo 'dns').
Vale la pena sottolineare che strumenti come scavare , host e il venerabile nslookup non seguono questo ordine; sono esplicitamente strumenti di query DNS. Ciò significa che se si fa affidamento su di essi (ad esempio in uno script), si potrebbe ottenere un risultato diverso rispetto ai normali programmi client (che utilizzano il risolutore di sistema). Per questo motivo, utilizzare il programma getent negli script, in particolare se si dispone di un componente di memorizzazione nella cache come nscd in esecuzione.
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
Quindi la chiave da asporto qui è che a) se hai / etc / hosts ben configurato con una voce per la tua macchina, e b) il tuo /etc/nsswitch.conf ha la solita configurazione - hosts: files dns
in questo ordine, quindi c) anche se non hai DNS ben configurato nel tuo ambiente, allora hostname --fqdn
dovrebbe funzionare.
In un DNS ben configurato, ci si aspetterebbe di avere un indirizzo "inverso" (un "record PTR") che fornisca il nome "canonico" del server e che sia possibile cercare anche quel nome (un " Un record "per IPv4).
Versione breve: aggiungi --verbose
; ti indicherà ciò che ti manca.
Spero che ti aiuti a capire cosa sta succedendo.