Korzystam z RHEL 5.7, a hostnamepolecenie podaje mi poprawną nazwę hosta.
Ale hostname -si hostname -fpowrót: Unknown host. Dlaczego?
/etc/hostname?
hostname -fużywa DNS, czy masz odwrotny wpis DNS dla swojego adresu IP?
Korzystam z RHEL 5.7, a hostnamepolecenie podaje mi poprawną nazwę hosta.
Ale hostname -si hostname -fpowrót: Unknown host. Dlaczego?
/etc/hostname?
hostname -fużywa DNS, czy masz odwrotny wpis DNS dla swojego adresu IP?
Odpowiedzi:
(skopiowane z jednej z moich odpowiedzi na SF )
hostnameKomenda zwraca wyniki z DNS i /etc/hosts.
hostnamejest równoważne uname -ni jest faktyczną „nazwą hosta” lub „ nazwą węzła ” skrzynki.
Wszystkie pozostałe hostnameargumenty używają tej nazwy węzła do wyszukiwania informacji.
Więc zanim przejdę dalej, powinienem wyjaśnić /etc/hostsformat pliku.
Pierwsze pole jest dość oczywiste, jest to adres IP, na który powinny się rozstrzygać wszystkie nazwy hostów w linii. Drugie pole to podstawowa nazwa hosta dla tego adresu IP. Pozostałe pola to aliasy.
Więc jeśli uruchomisz hostname -f, najpierw spróbuje rozwiązać adres IP dla twojej nazwy węzła. W zależności od sposobu hosts:skonfigurowania wpisu w /etc/nsswitch.conftej metodzie będą się różnić.
/etc/resolv.confdopóki nie otrzyma adresu IP z DNS. /etc/hostsdo linii, w której podstawową nazwą hosta lub aliasu jest Twoja bieżąca nazwa węzła ( uname -n), a następnie zwróci adres IP w tej linii. Po uzyskaniu adresu IP podejmie próbę wyszukiwania wstecznego dla tego adresu IP. Ponownie użyje do tego DNS i twojego pliku hosts na podstawie twojego nsswitch.conf. W przypadku użycia pliku hosts zwróci podstawowy wpis (który jest pierwszym polem po adresie IP w pliku).
hostname -abędzie działać tylko z plikiem hosts, ponieważ wyszukiwanie wsteczne w DNS daje tylko 1 wynik. Z plikiem hosts zwraca alises w pasującej linii (czyli po pierwszym wpisie, podstawowej nazwie hosta).
Krótko mówiąc, prawdopodobną przyczyną problemu jest brak wpisu /etc/hostszawierającego nazwę hosta ( uname -n).
Przykłady
Jeśli Twoja nazwa węzła to „foobar”, a masz wpis w następujący /etc/hostssposób:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
Otrzymasz następujące wyniki polecenia:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost