Unix

如何在 bash 腳本中獲取 Unix 上的完全限定名稱 (FQN)?

  • November 5, 2018

我已經hostname在幾台伺服器(RedHat、Ubuntu)上進行了測試,並hostname -f證明不可靠,有時只返回短名稱(如本問題所述)。

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

是否有另一種方法可以可靠地獲取完全限定名稱,並將其儲存在 bash 變數中?

我在 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}"

這是我找到 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 字元串操作刪除我不想要的東西的問題。

也許有更簡單的方法?

引用自:https://serverfault.com/questions/367141