
私は数年間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 のマニュアルページで、システムコールはカーネルから次の構造を検索します。
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のホスト名が不要になったら、私は正しいでしょう。