RHEL 5.7を実行していますが、hostname
コマンドで正しいホスト名が表示されます。
だが hostname -s
およびhostname -f
戻る:Unknown Host
。どうして?
hostname
コマンドは、DNSおよび/etc/hosts
から結果を返します。
hostname
はuname -n
と同等であり、ボックスの実際の「ホスト名」または「ノード名」です。
他のすべてのhostname
引数は、このノード名を使用して情報を検索します。
先に進む前に、/etc/hosts
ファイル形式について説明する必要があります。
最初のフィールドはかなり明白です。その行のすべてのホスト名が解決するIPアドレスです。 2番目のフィールドは、そのIPのプライマリホスト名です。残りのフィールドはエイリアスです。
したがって、hostname -f
を実行すると、最初にノード名のIPを解決しようとします。 hosts:
での/etc/nsswitch.conf
エントリの構成方法によって、このメソッドは異なります。
/etc/resolv.conf
で構成された検索ドメインが使用されます。/etc/hosts
を調べて、プライマリホスト名またはエイリアス名が現在のノード名(uname -n
)である行を見つけ、そのIPアドレスを返します。ライン。IPを取得すると、そのIPで逆引きを試みます。この場合も、DNSを使用し、nsswitch.conf
に基づいてhostsファイルを使用します。ホストファイルを使用する場合は、プライマリエントリ(ファイル内のIPの後の最初のフィールド)を返します。
hostname -a
は、DNSで逆ルックアップを実行すると1つの結果しか得られないため、hostsファイルでのみ機能します。 hostsファイルを使用すると、一致する行(最初のエントリ、プライマリホスト名の後のすべて)にエイリアスが返されます。
つまり、問題の原因として考えられるのは、ホスト名(/etc/hosts
)を含むuname -n
にエントリがないことです。
例
ノード名が 'foobar'で、/etc/hosts
に次のようなエントリがある場合:
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
その後、次のコマンド結果が得られます。
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost