以下是该命令的输出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 风格。