W przeciwieństwie do prostego hostname
wywołania polecenia, wywołanie hostname --fqdn
będzie próbowało zrobić jeszcze kilka rzeczy, co często spowoduje wyszukiwanie DNS.
Weźmy na przykład następujące (udane) wywołanie (pochodzi z pudełka Red Hat, ale wyobrażam sobie, że powinno być tak samo dla 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
Zwróć uwagę na bardzo pomocną --verbose
opcję.
Krótko mówiąc, wszystko inne niż proste hostname
prawdopodobnie robi więcej niż się spodziewasz. Oto inny przykład:
# 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
I podsumowując:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
Zauważ, że nazwa hosta systemu (zwrócona przez gethostname) może mi dać niekwalifikowaną nazwę hosta, na przykład „myserver”. Dlatego program, który chcesz zainstalować, używa hostname --fqdn
zamiast tego.
Komunikat o błędzie hostname: Name or service not known
pochodzi z funkcji resolvera : są to części biblioteki systemowej, które tłumaczą nazwy i adresy (zazwyczaj nazwy DNS i adresy IP).
W rzeczywistości resolver robi więcej niż tylko DNS (i więcej niż tylko translację między nazwami hostów a adresami IP); jego zachowanie jest częściowo skonfigurowane przez plik /etc/nsswitch.conf
i zwykle sprawdza następujące, zwykle w tej kolejności:
- „hosts” (w systemie Linux oznacza / etc / hosts)
- (czasami) nscd (demon buforowania usługi nazw)
- „dns”
(uwaga, możesz również mieć buforujący serwer DNS, taki jak dnsmasqd --- w powyższym punkcie, który wciąż jest objęty mechanizmem „dns”).
Warto zauważyć, że narzędzia takie jak dig , host i czcigodny nslookup nie przestrzegają tej kolejności; są to jawnie narzędzia do wysyłania zapytań DNS. Oznacza to, że jeśli na nich polegasz (na przykład w skrypcie), możesz uzyskać inny wynik niż zwykłe programy klienckie (korzystające z resolvera systemu). Z tego powodu używaj programu getent w skryptach, szczególnie jeśli masz komponent buforujący, taki jak nscd.
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
Kluczową kwestią tutaj jest to, że: a) jeśli dobrze skonfigurujesz / etc / hosts z wpisem dla twojego komputera, i b) twój /etc/nsswitch.conf ma zwykłą konfigurację - hosts: files dns
w tej kolejności, to c) nawet jeśli nie masz dobrze skonfigurowanego DNS w swoim środowisku, hostname --fqdn
powinno działać.
W dobrze skonfigurowanym systemie DNS można oczekiwać, że będzie miał jeden „zwrotny” adres („rekord PTR”), który nadaje „kanoniczną” nazwę serwera, a nazwę tę można również wyszukać („ Rekord „dla IPv4).
Wersja skrócona: dodaj --verbose
; wskaże ci to, czego ci brakuje.
Mam nadzieję, że pomożesz zrozumieć, co się dzieje.