На відміну від простого hostname
виклику команди, виклик hostname --fqdn
буде намагатися зробити ще кілька речей, що часто призводить до деяких пошукових записів DNS.
Візьмемо для прикладу наступне (успішне) виклик (це з поля Red Hat, але я думаю, він повинен бути таким же для 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
Зверніть увагу на дуже корисний --verbose
варіант.
Коротше кажучи, що-небудь, крім простого hostname
, мабуть, робить більше, ніж ви очікуєте. Ось ще один приклад:
# 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
І щоб її округлити:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
Зауважте, що ім'я хоста системи (повернене gethostname) може викликати некваліфіковане ім'я хоста, наприклад просто "myserver". Ось чому програма, яку ви хочете встановити, використовує hostname --fqdn
натомість.
Повідомлення про помилку hostname: Name or service not known
надходить від функцій розв'язувача : це частини системної бібліотеки, які перекладаються між іменами та адресами (зазвичай DNS-імена та IP-адреси).
Насправді, резолютор робить більше, ніж просто DNS (і більше, ніж просто переклад між іменами хостів та IP-адресами); його поведінка частково налаштована файлом /etc/nsswitch.conf
, і, як правило, він звертається до наступного, як правило, у такому порядку:
- 'хости' (в Linux, засоби / тощо / хости)
- (іноді) nscd (кеш-служба кешування імен)
- 'dns'
(зверніть увагу, ви також можете мати кешування DNS-сервера, такого як dnsmasqd --- для точки вищезгаданого, що все ще знаходиться під механізмом 'dns').
Варто зазначити, що такі інструменти, як копати , хостинг та поважний nslookup не дотримуються цього порядку; вони є явними засобами запитів DNS. Це означає, що якщо ви покладаєтесь на них (наприклад, у сценарії), ви можете отримати інший результат, ніж те, що мали звичайні клієнтські програми (для яких використовується системний резолютор). З цієї причини використовуйте програму getent у скриптах, особливо якщо у вас є кешований компонент, наприклад nscd.
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
Отже, ключовим виводом тут є те, що а) якщо у вас / etc / hosts добре налаштовані записи для вашої власної машини, і b) ваш /etc/nsswitch.conf має звичайну конфігурацію - hosts: files dns
у такому порядку, тоді c) навіть якщо у вас немає налаштування DNS у вашому оточенні, тоді це hostname --fqdn
має працювати.
У добре налаштованому DNS, вам слід було б мати одну "зворотну" адресу ("запис PTR"), яка дає "канонічне" ім'я вашого сервера, і це ім'я також має бути в змозі шукати (" Запис "для IPv4).
Коротка версія: додати --verbose
; це вкаже на те, чого вам не вистачає.
Сподіваюся, що допоможе вам зрозуміти, що відбувається.