什么决定了 Linux 主机名?

fed*_*ora 13 fedora ubuntu hostname

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

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

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

ein*_*onm 11

该hostname程序执行了一个 uname 系统调用,从运行中可以看出:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...
Run Code Online (Sandbox Code Playgroud)

从uname 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
           };
Run Code Online (Sandbox Code Playgroud)

所以域名来自 NIS/YP 系统,如果我们相信评论。因此,很有可能,您的网络上可能有一个 NIS / YP 服务正在向您回传由 ubuntu 操作系统设置的名称。

  • 这不是真的,请参阅 `hostname(1)` 手册页,其中解释了如何设置和返回主机名。尽管名称相似,但 NIS/YP 域名与解析器返回的 FQDN/DNS 域名无关。如果您尚未配置 NIS/YP,则 NIS/YP 域名将被取消设置。 (5认同)

rac*_*man 5

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

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

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