
私はここ数年、Linux、特に Fedora をメイン システムとして使用していますが、一部のネットワークに接続して IP になる場合を除いて、ホスト名は常に「localhost」に設定されています。今日、次のような動作が発生しましたが、理解に苦しみます。
ラップトップの別のパーティションに Ubuntu をインストールし、Ubuntu のインストール中にコンピューター名 / ホスト名を設定しました。しかし、Fedora を再起動したときに、Fedora はホスト名を Ubuntu のインストール時に設定した名前に更新していました。
ホスト名はディストリビューションのインストールのパーティションに設定され、保存されていると常に思っていました。実際、Fedora の /etc/hostname の内容は依然として「localhost.localdomain」となっていますが、コマンドを実行するとhostname
新しいホスト名が表示されます。両方のインストールは efi ブート パーティションを共有していますが、それ以外は別々です。Fedora インストールが新しいホスト名をどこから、なぜ読み取っているのか疑問に思っています。
答え1
プログラムhostname
は、実行してみるとわかるように、uname システムコールを実行します。
strace hostname
...
e="Linux", nodename="my.hostname.com", ...}) = 0 ... uname syscall のマニュアル ページによると、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 など) で指定したルールに従ってソース (ローカルの /etc/hosts ファイル、DNS、NIS など) を解釈して、そのような名前を決定します。
答え3
おそらく、Ubuntu はインストール中に自宅のルーターを介してインターネットに接続しました。これを行うために、Ubuntu はルーターにホスト名を報告し、一時的なローカル IP を取得しました。
Fedora を再起動すると、同じルーターに接続して IP アドレスを取得しますが、Ubuntu 用に作成された古いリースは引き続き有効です。同じネットワーク カードと同じハードウェア MAC アドレスを持つ同じマシンなので、同じリースが再利用されます。
私の推測では、ルータは IP リースが登録されたホスト名を送信し、Fedora がそれを取得するようです。
残念ながら、私の回答を裏付ける証拠や引用はありません。Windows とのデュアルブートで Ubuntu をインストールした個人的な経験について話すだけです。当時、Ubuntu はインストール中に Windows で使用したのと同じホスト名を設定することを拒否しました。名前がすでにネットワークに存在していると主張したためです。おそらく、ここでも同様のことが起きているのでしょう。
私の推測があなたの状況にも当てはまるかどうかを確認するには、ルーターの設定インターフェースで IP リースを取り消してから、Fedora を再起動してみてください。Ubuntu のホスト名が取得されなくなったら、私の推測は正しいはずです。