Nil*_*ils 12
我在 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)
Run Code Online (Sandbox Code Playgroud)
所以要涵盖所有情况:
fqn=$(host -TtA $(hostname -s)|grep "has address"|awk '{print $1}') ; \
if [[ "${fqn}" == "" ]] ; then fqn=$(hostname -s) ; fi ; \
echo "${fqn}"
Run Code Online (Sandbox Code Playgroud)
这是我找到 fqn 的一种方式:
fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn
Run Code Online (Sandbox Code Playgroud)
换句话说,我必须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.
Run Code Online (Sandbox Code Playgroud)
从那里开始,这只是通过bash 字符串操作删除我不想要的内容的问题。
也许有更简单的方法?
您的方法仅在您正确配置了主机名并具有正确的 dns 设置等情况下才有效。如果您拥有所有这些,那么您已经知道您的 fqdn。
没有可靠的方法来获取 fqdn。一个 IP 地址可以有多个 fqdn,一个 fqdn 可以有多个 IP 地址……而很多 IP 根本没有任何 fqdn。
如果您的机器直接连接到互联网,只需使用 IP 地址并发出反向 DNS 请求:host 1.2.3.4
但这通常不会给您所需的答案(例如,只需尝试使用 google)。