use*_*637 30 domain-name-system linux ubuntu
我/etc/hosts在 ubuntu 12.04 机器上有以下文件
127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
Run Code Online (Sandbox Code Playgroud)
然而,主机命令不能puppetmaster正确解析名称,而 telnet 命令是
root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)
root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
为什么 host 命令不解析 /etc/hosts 中的条目?
Kvi*_*sle 59
该host程序用于libresolv直接执行 DNS 查询,即不使用gethostbyname.
大多数程序在尝试连接到另一台主机时,会调用gethostbyname系统调用或类似的函数。此函数服从 的配置/etc/nsswitch.conf。这个文件有一行在 Ubuntu 12.04 中默认如下:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Run Code Online (Sandbox Code Playgroud)
这意味着它将首先使用/etc/hosts,然后回退到 DNS 查询。
如果要以这种方式执行主机查找,可以使用getent hosts. 例如:
$ getent hosts serverfault.com
198.252.206.16 serverfault.com
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
Mat*_*Ife 12
因为该host实用程序是专门的 DNS 查找实用程序。
大多数应用程序使用库调用getaddrinfo或gethostbyname. 这些库查询一个被调用的文件,/etc/nsswitch.conf以确定查找优先级和如何执行不同查找的策略。
通常/etc/nsswitch.conf包含行
hosts: files dns
Run Code Online (Sandbox Code Playgroud)
这告诉程序首先询问/etc/hosts然后询问 DNS 如果不成功。
由于主机专门进行 DNS 查找,因此不会/etc/hosts进行查找。
| 归档时间: |
|
| 查看次数: |
75143 次 |
| 最近记录: |