複数のサーバー(RedHat、Ubuntu)でhostname
をテストしましたが、hostname -f
は、信頼できないことが判明し、短い名前のみが返されることがあります( この質問 で説明されています)。
エイリアスでfqnを確認できます:hostname -a
(エイリアスの1つは私が探しているfqnです)が、エイリアスの順序は固定されていません。
完全修飾名を確実に取得してbash変数に格納する別の方法はありますか?
私はCentOS5でこれを試しました:
Host -TtA $SERVERNAME|grep "has address"|awk '{print $1}'
TCPモードでDNSを照会する必要があります。ご使用の環境でUDPが機能する場合は、「T」オプションを除外してください。
注:Ubuntu guest(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を見つけた1つの方法があります:
fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn
つまり、IPアドレスをnslookup
する必要がありました。
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
しかし、これは望ましい答えを与えないことがよくあります(たとえば、グーグルで試してみてください)。
しないhostname --fqdn
あなたのために働きますか?
クロスプラットフォームの代替方法で、python(少なくともpython 2.7およびpython 3)
python -c 'import socket; print(socket.getfqdn())'
Ubuntuでは、hostname -A