我正在运行 RHEL 5.7,该hostname命令为我提供了正确的主机名。
但是hostname -s并hostname -f返回:Unknown host. 为什么?
phe*_*mer 22
(复制自我对 SF 的回答之一)
该hostname命令从 DNS 和/etc/hosts.
hostname是equivilant到uname -n,是真正的“主机名”或盒子的“节点名”。
所有其他hostname参数都使用此节点名来查找信息。
所以在继续之前,我应该解释一下/etc/hosts文件格式。
第一个字段相当明显,它是该行上所有主机名都应解析为的 IP 地址。第二个字段是该 IP 的主要主机名。其余字段是别名。
因此,如果您运行hostname -f它,它将首先尝试为您的节点名解析 IP。根据您hosts:在/etc/nsswitch.conf此方法中配置条目的方式会有所不同。
/etc/resolv.conf直到它从 DNS 获取 IP。 /etc/hosts一行,其中主要主机名或别名是您当前的节点名 ( uname -n),然后在该行中返回 IP 地址。 一旦它拥有 IP,它将尝试对该 IP 进行反向查找。同样,它会为此使用 DNS 和基于您的 .hosts 文件的主机文件nsswitch.conf。在使用您的主机文件的情况下,它将返回主要条目(这是文件中 IP 之后的第一个字段)。
hostname -a仅适用于主机文件,因为在 DNS 中进行反向查找只会给您 1 个结果。对于主机文件,它返回匹配行中的别名(这是第一个条目之后的所有内容,主要主机名)。
简而言之,您的问题的可能原因是您没有/etc/hosts包含您的主机名 ( uname -n) 的条目。
示例
如果您的节点名称是“foobar”,并且您有这样的条目/etc/hosts:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
Run Code Online (Sandbox Code Playgroud)
然后你会得到如下命令结果:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost
Run Code Online (Sandbox Code Playgroud)