Я использую 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 для этого и вашего файла hosts на основе вашего nsswitch.conf
. В случае использования вашего файла hosts он вернет основную запись (которая является первым полем после IP-адреса в файле).
hostname -a
будет работать только с файлом hosts, поскольку обратный поиск в 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