机器如何确定其主机名?

机器如何确定其主机名?

以下是该命令的输出hostname

bash-3.2$ hostname
server1

该命令如何hostname确定主机名server1?我猜它会检查 DNS 服务器,因为这是 DNS 应该做的事情。还是它从/etc/hosts/文件或其他本地文件中获取此信息?

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

首先,解析名称的方式通常在 /etc/nsswitch.conf 中配置。您将看到如下一行:

主机:文件 DNS

这意味着它将首先读取文件/etc/hosts,如果不能解析,则询问 DNS。

现在,正如在man hostname系统中配置的机器名称中所述,并使用系统调用进行查询。这与给出的gethostname()相同uname内核名称没有参数和节点名uname -n,可能gethostname()也从中获取其信息。

因此,该命令的答案与 DNS 或 /etc/hosts 无关,除非这可能是内核在启动时设置的,但这取决于您使用的发行版/UNIX 风格。

相关内容