
私はRHEL 5.7を実行しており、このhostname
コマンドは正しいホスト名を提供します。
ただし、hostname -s
次のようにhostname -f
返されます。Unknown host
なぜ?
答え1
(からコピーSFに対する私の答えの1つ)
このhostname
コマンドはDNSとからデータを返します/etc/hosts
。
hostname
uname -n
ボックスの実際の「ホスト名」または「ノード名」と同じです。
他のすべてのhostname
パラメーターは、このノード名を使用して情報を検索します。
したがって、さらに進む前に/etc/hosts
ファイルの種類について説明する必要があります。
最初のフィールドは非常に明確です。これは、その行のすべてのホスト名を解決する必要があるIPアドレスです。 2番目のフィールドはIPのデフォルトホスト名です。残りのフィールドはエイリアスです。
したがって、これを実行すると、hostname -f
まずノード名のIPを解決しようとします。方法は、この方法hosts:
で項目を構成する方法によって異なります。/etc/nsswitch.conf
/etc/resolv.conf
DNSを使用するように設定すると、DNSがIPを取得するまで設定された検索ドメインが使用されます。/etc/hosts
ファイルを使用するように構成すると、デフォルトのホスト名またはエイリアスが現在のノード名()である行が見つかり、その行にuname -n
IPアドレスが返されます。
IP を取得すると、その IP のリバースルックアップを試みます。繰り返しますが、DNSを使用し、.hostsファイルに基づいていますnsswitch.conf
。ホストファイルを使用している場合は、デフォルトエントリ(つまり、ファイル内のIPの後の最初のフィールド)を返します。
hostname -a
DNSでリバースルックアップを実行すると、結果が1つだけ返されるため、ホストファイルのみを使用できます。ホストファイルを介して一致する行(最初のエントリ(デフォルトのホスト名)の後のすべてのエントリ)にエイリアスを返します。
/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