linux hostname -f命令在RHEL上不起作用


13

我正在运行RHEL 5.7,并且该hostname命令为我提供了正确的主机名。
hostname -shostname -f回报:Unknown host。为什么?


什么发行版?在我的Ubuntu 12.04系统上,所有3个都可以工作。
2014年

您使用什么操作系统?如果是Linux,该配哪个?的内容是/etc/hostname什么?
terdon

1
hostname -f使用DNS,您的IP是否有反向DNS条目?
2014年

@terdon我正在使用RHEL5(红帽企业linux服务器版本5.7(tikanga)),并且没有这样的文件(/ etc / hostname)
redoc 2014年

@Barmar我的主机上没有配置dns。我在主机文件(/ etc / hosts)中添加了IP地址和fqdn,此错误是由于未配置dns导致的?
redoc 2014年

Answers:


21

(摘自我对SF的回答之一

hostname命令从DNS和返回结果/etc/hosts

hostnameuname -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以及基于的主机文件nsswitch.conf。如果使用主机文件,它将返回主条目(这是文件中IP后的第一个字段)。

hostname -a仅可用于hosts文件,因为在DNS中进行反向查找只会给您1个结果。使用hosts文件,它在匹配的行中返回别名(这是第一个条目之后的所有内容,即主要主机名)。

 

简而言之,问题的可能原因是您没有/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

关于如何获得价值的解释很棒!我的FQDN位于127.0.0.1行的末尾,该行具有主要主机名localhost。我只是删除了它们,而仅将FQDN保留在具有真实IP的行上,它解决了主机名-f返回本地主机的问题。
qwertzguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.