Чому на моєму комп'ютері Ubuntu не працює "ім'я хоста --fqdn"?


10

Я використовую Ubuntu 10.04 LTS, і коли я набираю команду hostname --fqdn, я отримую повідомлення: hostname: Name or service not known.

Через це я не можу globalуспішно встановити , і при спробі отримати таку помилку:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

Моя /etc/nsswitch.confвнизу.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Хтось має ідеї, що це означає і як я можу це виправити?


1
Чому ви хочете FQDN? Якщо вам доведеться запитати, ви, мабуть, не хочете одного або обидва використовувати.
msw

Відповіді:


11

Чи можете ви надати вміст /etc/nsswitch.conf?

Схоже, що /etc/nsswitch.conf має погане значення для рядка "господарі". Починається це з "файлів"?

В іншому випадку FQDN встановлюється шляхом редагування / etc / hosts та розміщення FQDN у рядку, де відображається ім'я хоста. Припустимо, у вас є ім'я хоста "foo", і ви знайдете рядок:

127.0.0.1 foo

Ви б редагували це так:

127.0.0.1 foo.localdomain foo

foo.localdomain буде вашим новим FQDN.


Я включив вміст цього файлу, як ви просили! Дякую за відповідь!! :)
RadiantHex

@Rapael Я змінив файл / etc / hosts, але він почав видавати мені тимчасовий збій у дозволі імені. Будь-які ідеї, чому це відбувається?
Мухаммед Адель Захід Задід

6

редагуйте / etc / hosts, щоб додати свій FQDN

Інформація про синтаксис, розміщений тут: http://www.faqs.org/docs/securing/chap9sec95.html

оновлення: повторне читання вашого запитання майже звучить так, що у вас або неправильно встановлений шлях, або з програмою імені хоста щось не так.

робити "яке ім'я хоста"

він повинен повернутися зі шляху '/ bin / hostname'

якщо це працює, спробуйте команду ще раз, як,

'/ bin / hostname --fqdn'


Дякую!!! Вибачте, якщо я запитую це, але як я дізнаюся свій FQDN?
RadiantHex

1
добре це означає "Повністю кваліфіковане ім'я домену" superuser.com - це FQDN. Якщо у вас є домен, ви можете ним користуватися, інакше ви можете просто скласти щось, якщо ви перебуваєте у внутрішній мережі.
Мадфла

1
Дякую @Mudfly! Я спробував ваші вказівки, останні команди знову повертають "ім'я хоста: ім'я чи послугу невідомо"!
RadiantHex

Без додаткової інформації важко дізнатися умови вашої проблеми. EG: це локальна установка, ви ввійшли через ssh, використовуєте обліковий запис користувача або ввійшли в root? Можливо, ви захочете відвідати ubuntuforums.org та шукати інших, які вирішили подібні проблеми.
Мадфлій

1
Тут відбувається дикий стрибок, але Ubuntu надає перевагу використанню sudo над використанням root. Цілком можливо, що установка не встановлена ​​правильно. Перевірити це дуже просто. По-перше, ви можете зробити 'ls -al / root /' і побачити, чи ви можете бачити .bashrc Другий, якщо у вас немає .bashrc скопіювати його з skel 'cp /etc/skel/.bashrc ./', ви можете зробити це навіть якщо у вас вже є файл. По-третє, зробіть '/ bin / bash', щоб переконатися, що ви використовуєте bash. Нарешті спробуйте свою оригінальну команду ще раз, вам слід працювати в повністю налаштованій оболонці bash.
Mudfly

0

На відміну від простого 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; це вкаже на те, чого вам не вистачає.

Сподіваюся, що допоможе вам зрозуміти, що відбувається.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.