回答:
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}"
host -TtA $(hostname -s)|grep "has address"|awk '{print $1}'
私のRedHatのサーバーに取り組んで
fqnを見つけた1つの方法を次に示します。
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文字列の操作を介して、不要なものを削除するだけの質問でした。
おそらくもっと簡単な方法がありますか?
この方法は、ホスト名を正しく構成し、正しいDNS設定などを行っている場合にのみ機能します。すべて揃っている場合は、fqdnがすでにわかっています。
fqdnを取得する信頼できる方法はありません。単一のIPアドレスに複数のfqdnを含めることができ、単一のfqdnに複数のIPアドレスを含めることができます...そして、多くのIPにはfqdnがまったくありません。
マシンがインターネットに直接接続されている場合は、IPアドレスを使用して逆DNS要求を作成します。host 1.2.3.4
しかし、これはたいていの場合、希望する答えを提供しません(たとえばgoogleで試してください)。
host
ため、Aレコードのみを取得する(または一致するルックアップを作成する)ために回答を解析します。
うまくいかないhostname --fqdn
?
hostname --fqdn
では、ホスト名エイリアスの1つとしてfqdnが定義された短い名前を返します。
-f
と--fqdn
同じものです。