什么决定了Linux主机名?


13

在过去的几年中,我一直使用Linux作为主要系统,特别是Fedora,我一直看到我的主机名设置为“ localhost”,但当我连接到某些网络并成为IP时除外。今天,我经历了以下行为,但是我很难理解。

我在笔记本电脑的另一个分区上设置了Ubuntu安装,并在Ubuntu安装过程中设置了计算机名称/主机名。但是,当我重新启动回Fedora时,Fedora将我的主机名更新为我在Ubuntu安装中设置的名称。

我一直以为主机名已配置并存储在发行版安装的分区上,确实Fedora上/ etc / hostname的内容仍显示为“ localhost.localdomain”,但运行hostname命令将显示新的主机名。这两个安装共享一个efi引导分区,但其他情况下是离散的。我想知道Fedora安装从何处以及为什么要读取新主机名?


hosts:在/etc/nsswitch.conf中输入什么?
cutrightjm

@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora

Answers:


12

hostname程序执行一个uname syscall,从运行中可以看出:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

uname syscall手册页中,它说syscall从内核中检索以下结构:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system 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
           };

因此,如果我们相信此评论,则域名来自NIS / YP系统。因此,您的网络上可能存在NIS / YP服务,该服务正在将ubuntu OS设置的名称回退给您。


5
这不是正确的,请参见hostname(1)手册页,其中说明了如何设置和返回主机名。尽管名称相似,但NIS / YP域名与解析程序返回的FQDN / DNS域名无关。如果您尚未配置NIS / YP,则NIS / YP域名将被取消设置。
bodgit '17

您关心的是“ nodename”字段吗?将与unix怀旧风格保持一致,仍将IP网络视为可选的和实现定义的东西:)
rackandboneman

5

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

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

主机具有一个或多个实际连接到TCP / IP(或其他网络堆栈-并非世界上所有网络都是IP!)地址的主机名,这些名称由解析器库函数在用户空间中处理( libc),它将根据您在适当的配置文件(/etc/nsswitch.conf、/etc中为其指定的规则)解释源(本地/ etc / hosts文件,DNS,NIS ....)来确定此类名称。 /host.conf等...)。


3

在安装过程中,Ubuntu可能通过您的家庭路由器连接到了Internet。为此,它向路由器报告了其主机名,并获得了一个临时的本地IP。

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

我的猜测是,路由器发送在其上注册了IP租约的主机名,Fedora则选择了该主机名。

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

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


DHCP客户端确实有可能向服务器发送主机名,或从服务器读取主机名。大多数事情都首先执行(尽管当主机名设置为“ localhost”时,它不太可能发挥很大作用:)。使用Linux DHCP客户端可以 DHCP服务器读取主机名,但是我的理解是并不总是启用此支持(例如)。有趣的是,最近的Fedora似乎可以做到这一点。
sourcejedi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.