Ниже приведен вывод команды hostname .

bash-3.2$ hostname
server1

Как команда hostname определяет имя хоста как server1? Я предполагаю, что он проверяет DNS-сервер, так как это то, что DNS должен делать .. или он получает эту информацию из /etc/hosts/ file или другого локального файла?

bash-3.2$ cat /etc/hosts
#
# Internet host table
#
127.0.0.1       localhost
123.123.9.133   server1       loghost
123.123.9.134      load-balancer.tsg.ge.com load-balancer
bash-3.2$ uname
SunOS

1 ответ1

2

Во-первых, способ разрешения имен настраивается обычно в /etc/nsswitch.conf. У вас будет такая строка:

хосты: файлы днс

Это означает, что он сначала прочитает файл /etc /hosts и, если не решит, спросит DNS.

Теперь, как указано в man hostname имя машины настраивается в системе и запрашивается системным вызовом gethostname() . Это то же самое с uname который дает имя ядра без аргумента и nodename с uname -n который, вероятно, тоже получает информацию от gethostname() .

Таким образом, ответ на эту команду не имеет ничего общего ни с DNS, ни с /etc /hosts, за исключением того, что, вероятно, это установлено ядром во время загрузки, но это зависит от используемой вами версии дистрибутива /UNIX.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .