Unix
如何在 bash 腳本中獲取 Unix 上的完全限定名稱 (FQN)?
我已經
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 字元串操作刪除我不想要的東西的問題。
也許有更簡單的方法?