Linux 主机名由什么决定?

Linux 主机名由什么决定?

几年来,我一直使用 Linux 作为我的主系统,特别是 Fedora,我总是看到我的主机名设置为“localhost”,除了当我连接到某些网络并且它成为我的 IP 时。今天我经历了以下行为,但我无法理解。

我在笔记本电脑的另一个分区上设置了 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 操作系统设置的名称返回给您。

答案2

Linux 系统上的主机名有两个独立的(!)概念。

内核认为本地主机名(由 gethostname/uname 和 sethostname 系统调用处理)独立于任何网络连接 - 如果您构建的内核不具备 TCP/IP 网络功能,这些机制仍然存在。

有一个或多个主机名实际上连接到主机所拥有的 TCP/IP(或其他网络堆栈 - 并非世界上所有网络都是 IP!)地址,并且这些主机名由解析器库函数(部分libc),它将根据您在适当的配置文件(/etc/nsswitch.conf、/etc /host.conf 等...)。

答案3

Ubuntu 在安装过程中可能通过家庭路由器连接到互联网。为此,它向路由器报告其主机名并获取临时本地 IP。

当您现在重新启动到 Fedora 时,它将连接到同一路由器以获取其 IP 地址,但为 Ubuntu 创建的旧租约仍然有效。由于它是同一台机器,具有相同的网卡和相同的硬件 MAC 地址,因此它将重用相同的租约。

我的猜测是,路由器发送了注册 IP 租约的主机名,Fedora 会接收该主机名。

不幸的是,我没有证据或引文来支持我的答案,我只能谈谈在 Windows 和双启动中安装 Ubuntu 的个人经验。当时,Ubuntu 拒绝在安装过程中设置与我在 Windows 中使用的主机名相同的主机名,因为它声称该名称已经存在于网络中。我们这里可能也发生过类似的事情。

要验证我的猜测是否也适用于您的情况,请尝试在路由器的配置界面中撤销您的 IP 租约,然后重新启动 Fedora。如果它不再需要 Ubuntu 的主机名,我应该是对的。

相关内容