4

我们有一个脚本需要对有限的主机列表采取行动。但是每次我们在 /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

4 回答 4

5

首先,我关于不在 hosts 文件中的东西的说法是错误的。这正是他们所在的地方。我很愚蠢。

但答案是:

getent hosts

这将使它打印出所有内容,我可以从那里进行查找。

于 2013-01-24T16:33:00.773 回答
1

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

在正常工作的 DNS 环境中,您可以使用以下命令检查主机名与其​​对应的 IP

# host host_name

这将给出主机的 IP 地址。如果主机名不存在,则会给您相应的主机未找到消息。

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

于 2013-01-24T16:32:28.467 回答
1

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

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

这是 bash,几乎可以适应一切。

dig +noall +answer google.de

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

于 2018-05-08T12:46:28.507 回答
0

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

于 2013-01-24T17:31:45.460 回答