我正在运行 RHEL 5.7,该hostname
命令为我提供了正确的主机名。
但是hostname -s
并hostname -f
返回:Unknown host
.为什么?
答案1
(复制自我对SF的回答之一)
该hostname
命令返回来自 DNS 和/etc/hosts
.
hostname
相当于uname -n
并且是盒子的实际“主机名”或“节点名”。
所有其他hostname
参数都使用此节点名来查找信息。
因此,在进一步讨论之前,我应该解释一下/etc/hosts
文件格式。
第一个字段相当明显,它是线路上所有主机名应解析的 IP 地址。第二个字段是该 IP 的主要主机名。其余字段是别名。
因此,如果您运行hostname -f
它,它将首先尝试解析您的节点名的 IP。根据您hosts:
在/etc/nsswitch.conf
此方法中配置条目的方式,该方法会有所不同。
- 如果您将其配置为使用 dns,它将使用配置的搜索域,
/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
然后你会得到如下命令结果:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost