如何在 Bash 脚本中获取 Unix 上的完全限定名称 (FQN)?

如何在 Bash 脚本中获取 Unix 上的完全限定名称 (FQN)?

我已经hostname在多台服务器(RedHat、Ubuntu)上进行了测试,结果hostname -f证明它不可靠,有时只返回短名称(如这个问题)。

我可以在别名中看到 fqn:(hostname -a其中一个别名是我要查找的 fqn),但是别名的顺序不是固定的。

是否有其他方法可以可靠地获取完全限定名称并将其存储在 bash 变量中?

答案1

我在 CentOS5 上尝试过这个:

host -TtA $SERVERNAME|grep "has address"|awk '{print $1}'

我必须在 TCP 模式下查询 DNS。如果 UDP 在您的环境中有效,则请放弃“T”选项。


注意:在 Ubuntu 上客人 (VirtualBox) 它不起作用:

git@aHostname:~/$ host -TtA $(hostname -s)
Host aHostname not found: 3(NXDOMAIN)

为了涵盖所有情况:

fqn=$(host -TtA $(hostname -s)|grep "has address"|awk '{print $1}') ; \
if [[ "${fqn}" == "" ]] ; then fqn=$(hostname -s) ; fi ; \
echo "${fqn}"

答案2

以下是我找到 fqn 的一种方法:

fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn

换句话说,我需要nslookupIP 地址,它给出了如下信息:

Server:         128.xxx.yyy.zzz
Address:        128.xxx.yyy.zzz#ww

aa.bb.cc.dd.in-addr.arpa        name = myserver.fully.qualified.name.

从那以后,我只需要删除那些我不想要的东西,通过Bash 字符串操作

也许有更简单的方法?

答案3

hostname --fqdn对你来说不起作用吗?

答案4

在 Ubuntu 中,你可以这样做hostname -A

相关内容