Linuxホスト名はどのように決定されますか?

Linuxホスト名はどのように決定されますか?

私は数年間Linux、特にFedoraを基本システムとして使用してきましたが、特定のネットワークに接続してIPになる場合を除いて、常にホスト名が「localhost」に設定されています。今日、私は次のような行動を経験しましたが、理解できません。

私のラップトップの他のパーティションにUbuntuインストールを設定し、Ubuntuインストール中にコンピュータ名/ホスト名を設定しました。 Fedoraで再起動すると、Fedoraはホスト名をUbuntuのインストール時に設定した名前に更新しました。

私はいつもホスト名がディストリビューションがインストールされているパーティションに設定され保存されていると思いました。実際、Fedoraの/ etc / hostnameの内容はまだ「localhost.localdomain」ですが、コマンドを実行するとhostname新しいホスト名が表示されます。両方のインストールはefiブートパーティションを共有しますが、それ以外は独立しています。 Fedoraのインストールが新しいホスト名を読み取る場所と理由を知りたいです。

答え1

プログラムはhostnameuname システムコールを実行しましたが、これはタスクで見ることができます。

strace hostname
...

e="Linux", nodename="my.hostname.com", ...}) = 0 ... uname syscall のマニュアルページで、システムコールはカーネルから次の構造を検索します。

  struct utsname {
               char sysname[];    /* Operating system name (e. */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[ystem release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

したがって、このレビューを信じるなら、ドメイン名はNISystemから来ています。したがって、nhatのYPサービスがUbuntu OS設定名をユーザーに返す可能性が高くなります。

答え2

Linuxシステムには、ホスト名に2つの別々の(!)概念があります。

カーネルは、ネットワーク接続に関係なく、ローカルホスト名(gethostname / unameおよびsethostnameシステムコールとして扱われます)を考慮します。 TCP / IPネットワーク機能なしでカーネルを構築する場合、これらのメカニズムはまだ存在します。

ホストが所有するTCP / IP(または他のネットワークスタック - 世界中のすべてのネットワークがIPではない!)アドレスに実際に接続されている1つ以上のホスト名があり、これらのホスト名はリゾルバーライブラリ機能(の一部)として表示されます。 libc)、適切な設定ファイル(/etc/nsswitch.conf、/etc/host.confなど...)で設定した内容に基づいています。

答え3

Ubuntuは、インストール中にホームルーターを介してインターネットに接続できます。これを行うには、ホスト名をルーターに報告し、一時ローカルIPを取得します。

Fedoraを再起動すると、同じルータに接続してIPアドレスを取得しますが、Ubuntu用に作成された以前のリースはまだ有効です。同じネットワークカードと同じハードウェアMACアドレスを持つ同じシステムなので、同じリースを再利用します。

私の考えでは、ルーターはIPリースを登録するためにホスト名を送信し、Fedoraはそのホスト名を受け取るようです。

残念なことに、私の答えを裏付ける証拠や引用はありません。 WindowsにUbuntuをインストールし、ダブルブートした個人的な経験でのみ話します。当時、Ubuntuは名前がすでにネットワークに存在すると主張していたため、インストール中にWindowsで使用したのと同じホスト名設定を拒否しました。同様のことがここで起こったかもしれません。

私の推測があなたの場合にも当てはまるかどうかを確認するには、ルータの設定インターフェイスでIPリースをキャンセルしてFedoraを再起動してください。 Ubuntuのホスト名が不要になったら、私は正しいでしょう。

関連情報