我已经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
换句话说,我需要nslookup
IP 地址,它给出了如下信息:
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