有多个命令行实用程序可以解析主机名(,,host
),但它们都专门使用名称服务器,而应用程序通常首先查找(我相信使用 gethostbyname)。dig
nslookup
/etc/hosts
是否有一个命令行实用程序可以解析主机名,其行为类似于通常的应用程序,因此/etc/hosts
首先查找然后才询问名称服务器?
(我知道它可能就像 3 行 c 代码,但我需要它放在一个有点可移植的 shell 脚本中。)
答案1
这可以通过以下方式轻松实现getent
:
getent hosts 127.0.0.1
getent
将查找 中配置的任何类型的数据nsswitch.conf
。
答案2
一个有用的工具是getent
。因此,您可以使用getent hosts www.google.com
、 或getent hosts localhost
。它将从数据库中检索名称服务交换机配置中指定的条目/etc/nsswitch.conf
。
对于更现代的实现,使用getent ahosts www.google.com
它将获得多种结果。
答案3
使用getent ahosts
,例如:
$ getent ahosts www.google.com | sed -n 's/ *STREAM.*//p'
216.58.210.196
2a00:1450:4006:803::2004
您将通过 glibc 解析器获取所有 IPv4 和 IPv6 地址(因此/etc/hosts
首先使用,通常在 中配置/etc/nsswitch.conf
)。
不要使用getent hosts
,因为它会为您提供 IPv6 或 IPv4 地址(而不是两者),并且所选协议可能不是不起作用的协议。事实上,IPv6 地址通常是首选,但在某些地方,路由器会过滤(不支持)IPv6 数据。
答案4
resolveip
将会这样做。
奇怪的是,它是 RHEL 和 Ubuntu 上 mysql-server 包的一部分。