web-dev-qa-db-ja.com

linux hostname -fコマンドがRHELで機能しない

RHEL 5.7を実行していますが、hostnameコマンドで正しいホスト名が表示されます。
だが hostname -sおよびhostname -f戻る:Unknown Host。どうして?

13
redoc

SFでの私の回答の1つ)からコピー

hostnameコマンドは、DNSおよび/etc/hostsから結果を返します。

hostnameuname -nと同等であり、ボックスの実際の「ホスト名」または「ノード名」です。
他のすべてのhostname引数は、このノード名を使用して情報を検索します。

先に進む前に、/etc/hostsファイル形式について説明する必要があります。
最初のフィールドはかなり明白です。その行のすべてのホスト名が解決するIPアドレスです。 2番目のフィールドは、そのIPのプライマリホスト名です。残りのフィールドはエイリアスです。

したがって、hostname -fを実行すると、最初にノード名のIPを解決しようとします。 hosts:での/etc/nsswitch.confエントリの構成方法によって、このメソッドは異なります。

  • DNSを使用するように構成されている場合、DNSからIPを取得するまで、/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
21
Patrick