Я запускаю RHEL 5.7 і hostname
команда дає мені правильне ім'я хоста.
Але hostname -s
і hostname -f
повернення : Unknown host
. Чому?
/etc/hostname
?
hostname -f
використовує DNS, у вас є зворотний запис DNS для вашого IP?
Я запускаю RHEL 5.7 і hostname
команда дає мені правильне ім'я хоста.
Але hostname -s
і hostname -f
повернення : Unknown host
. Чому?
/etc/hostname
?
hostname -f
використовує DNS, у вас є зворотний запис DNS для вашого IP?
Відповіді:
(скопійовано з однієї з моїх відповідей на SF )
hostname
Команда повертає результати від DNS і /etc/hosts
.
hostname
є еквівалентним uname -n
і є фактичним "ім'ям хоста" або "ім'ям вузла" поля.
Усі інші hostname
аргументи використовують це ім’я вузла для пошуку інформації.
Отже, перш ніж йти далі, я повинен пояснити /etc/hosts
формат файлу.
Перше поле є досить очевидним, його IP-адреса повинна вирішувати всі імена хостів у рядку. Друге поле - це основне ім'я хоста для цього IP. Решта полів - псевдоніми.
Тож якщо ви запустите hostname -f
, спершу спробуйте вирішити IP для вашого імені. Залежно від способу hosts:
налаштування запису в /etc/nsswitch.conf
цьому методі буде відрізнятися.
/etc/resolv.conf
поки не поверне IP-адресу від DNS. /etc/hosts
знайде рядок, де основне ім’я хоста або псевдонім - це ваше поточне ім’я вузла ( uname -n
), а потім поверне IP-адресу в цьому рядку. Після того, як він отримає IP, він спробує зворотний пошук на цьому IP. Знову він використовуватиме DNS для цього та файл хостів на основі вашого nsswitch.conf
. У разі використання файлу хосту він поверне первинний запис (який є першим полем після IP-адреси у файлі).
hostname -a
працюватиме лише з файлом хостів, оскільки пошук зворотного пошуку в DNS дає лише 1 результат. За допомогою файлу hosts він повертає аліси у відповідний рядок (це все після першого запису, основне ім'я хоста).
Отже, коротше кажучи, ймовірною причиною вашої проблеми є те, що у вас немає запису, /etc/hosts
який містить ваше ім’я хоста ( uname -n
).
Приклади
Якщо ваше ім’я вузла "foobar", і ви маєте такий запис /etc/hosts
:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
Тоді ви отримаєте такі результати команд:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost