我正在使用Ubuntu,并使用Puppet管理我的主机.在一台或两台机器之前,我的主机解析为hostname.backend.example.com.最后两台机器解析为hostname.staging.internal.我对这些名字是如何到达感到有点困惑.
# /etc/resolv.conf nameserver 173.203.4.8 nameserver 173.203.4.9 domain backend.example.com
和
# /etc/hosts 10.182.230.38 web01.staging.internal web01 127.0.0.1 localhost localhost.localdomain
/ bin / hostname回复如下:
# hostname -a web01 # hostname -A 108-166-97-91.static.cloud-ips.com web01.staging.internal # hostname -I 108.166.97.91 10.182.230.38
存在将108.166.97.91映射到web01.backend.example.com的DNS记录.为什么,在哪里以及如何使用hostname来获取web01.staging.internal而不是公共DNS记录?
hostname命令返回DNS和/ etc / hosts的结果.
hostname与uname -n等效,并且是该框的实际“hostname”或“nodename”.
所有其他主机名参数都使用此节点名来查找信息.
所以在继续之前,我应该解释/ etc / hosts文件格式.
第一个字段相当明显,它的IP地址就行解析的所有主机名.第二个字段是该IP的主要主机名.其余字段是别名.
因此,如果您运行主机名-f,它将首先尝试解析您的节点名称的IP.根据您在/etc/nsswitch.conf中配置的主机:条目的方式,此方法会有所不同.
>如果您将其配置为使用dns,它将使用/etc/resolv.conf中配置的搜索域,直到从DNS获取IP.
>如果您将其配置为使用文件,它将在/ etc / hosts中查找主要主机名或别名是当前节点名(uname -n)的行,然后返回该行中的主要主机名.
一旦有IP,它就会尝试对该IP进行反向查找.同样,它将根据你的nsswitch.conf使用DNS和你的主机文件.在使用hosts文件的情况下,它将返回主条目(这是文件中IP之后的第一个字段).
hostname -a只能与hosts文件一起使用,因为在DNS中进行反向查找只能得到1个结果.使用hosts文件,它返回匹配行中的alises(这是第一个条目后的所有内容,即主要主机名).
例子
如果您的节点名为’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