在没有ping的情况下从命令行测试主机名是否存在

时间:2013-01-24 16:09:27

标签: linux bash ip host

我们有一个脚本需要对有限的主机列表采取行动。但每次我们在/ etc / hosts文件中添加或删除主机时,我们都必须更新此脚本。

基本上,说我的主机文件看起来像:

192.168.100.1     hostip_1
192.168.100.2     hostip_2
192.168.100.10    hostip_3
192.168.100.20    hostip_5

和我的脚本(bash)做类似的事情:

callmyfunction hostip_1
callmyfunction hostip_2
callmyfunction hostip_3
callmyfunction hostip_5

如果我想将hostip_4添加到主机列表中,我现在必须进入并编辑我的脚本并将其添加到列表中。虽然它是一个小编辑,但它仍然是一个可以在此过程中被遗忘的步骤(特别是如果有新系统的人进来)。

有没有办法可以测试'hostip_1'是否是系统中的有效主机名(无需ping主机或grepping / etc / hosts文件)?我们可能使用多个主机文件,不同的配置可能有不同的文件名,所以我不能依赖尝试grep单个文件。我需要系统为我做这项工作。

任何线索?

4 个答案:

答案 0 :(得分:4)

首先,我关于不在hosts文件中的内容的陈述是错误的。这正是它们的所在。对我来说是愚蠢的。

但答案是:

getent hosts

将它打印出来,我可以从那里进行查找。

答案 1 :(得分:0)

在填充/ etc / hosts文件时,我假设您没有使用DNS。所以解决方案不适合您的用例。但它仍然会给你一些指示。

在正常工作的DNS环境中,您可以使用以下命令

检查主机名到相应的IP
# host host_name

这将给出主机的IP地址。如果主机名不存在,那么它将为您提供相应的主机未找到消息。

您可以解析上述命令的输出,并可以推断出是否存在给定主机名。

答案 2 :(得分:0)

如果所有目标位于同一子网(同一网络),请使用arping,它会使用ARP检查主机是否可用。

答案 3 :(得分:0)

可能不在您的/ etc / hosts文件中...更好地搜索名称并查看是否可以找到IP:

(($(dig +noall +answer google.de |wc -c)>0)) && echo exists

这是bash,可以适应几乎所有事情。

dig +noall +answer google.de

如果找到则返回ips。如果为空,则无法在运行此代码的计算机中使用该名称。