Команда linux hostname -f не работает на RHEL

13

Я использую RHEL 5.7, и hostnameкоманда выдает мне правильное имя хоста.
Но hostname -sи hostname -fвернусь Unknown host. Почему?

REDOC
источник
Какой дистрибутив? На моей системе Ubuntu 12.04 все 3 работают.
Антон
Какую операционную систему ты используешь? Если Linux, какой дистрибутив? Каково содержание /etc/hostname?
Terdon
1
hostname -fиспользует DNS, у вас есть обратная запись DNS для вашего IP?
Бармар
@terdon Я использую RHEL5 (Red Hat Enterprise Linux версии 5.7 (tikanga)), и такого файла нет (/ etc / hostname)
redoc
@ Barmar Я не настроил DNS на моем хосте. Я добавил IP-адрес и fqdn в мой файл hosts (/ etc / hosts), эта ошибка является результатом того, что DNS не настроен?
Redoc

Ответы:

21

(скопировано с одного из моих ответов на SF )

Команда hostnameвозвращает результаты из DNS и /etc/hosts.

hostnameэквивалентно uname -nи является фактическим "именем хоста" или "именем узла" коробки.
Все остальные hostnameаргументы используют это имя для поиска информации.

Поэтому, прежде чем идти дальше, я должен объяснить /etc/hostsформат файла.
Первое поле довольно очевидно, это IP-адрес, к которому должны разрешаться все имена хостов в строке. Второе поле является основным именем хоста для этого IP. Остальные поля являются псевдонимами.

Поэтому, если вы запустите hostname -fего, сначала попытайтесь определить IP-адрес для вашего имени узла. В зависимости от того, как у вас hosts:настроена запись в /etc/nsswitch.confэтом методе, будет меняться.

  • Если он настроен на использование DNS, он будет использовать настроенные домены поиска, /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
Патрик
источник
Это объяснение того, как оно получает ценность, прекрасно! У меня было мое полное доменное имя в конце строки 127.0.0.1, которая имела в качестве основного имени хоста localhost. Я просто удалил их и оставил полное доменное имя только в строке с реальным IP, и это исправило мою проблему с именем хоста -f, возвращающим localhost.
qwertzguy