我们有一个脚本需要对有限的主机列表采取行动。但每次我们在/ 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单个文件。我需要系统为我做这项工作。
任何线索?
答案 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。如果为空,则无法在运行此代码的计算机中使用该名称。