在 Debian 系统上,hostname
返回不合格系统的主机名,同时domainname
返回(LAN)域名。例如:
$ hostname
nas
$ domainname
lan
我知道主机名存储在 中/etc/hostname
。没问题。因此我可以通过调用 来临时更改它hostname othernas
,或者通过编辑 来永久更改它/etc/hostname
。
但是我该如何更改域名呢?我可以通过致电 暂时更改domainname otherlan
,但是如何永久更改呢?
/etc/hostname
我尝试用谷歌搜索这个问题,但都指向了/etc/hosts
、/etc/networks
和/etc/network/interfaces
;但我检查了所有这些,却没有找到对的引用。我在谷歌lan
上搜索时还找到了和,但这些都没有告诉我信息实际上存储在磁盘上的什么位置。libc.so
getdomainname
uname
该论坛和其他论坛上的其他答案指出/etc/hostname
应包含完全限定的主机名,并且域名从中提取。这不是真的!如果我在 中输入一个完全限定的主机名/etc/hostname
,我最终会得到一个主机名nas.lan
和一个域名没有什么- 这会引发无穷无尽的问题。
答案1
论坛是正确的;DNS 域如果存在,则从主机名中获取名称(尽管我发现如果通过 /etc/hosts 推断,效果会更好)。没有明确的设置。
(我努力了写下我猜测的规则Linux 如何确定它。)
如果
hostname
报告了一个裸名称,则hostname -f
似乎首先使用 /etc/hosts 来解析它,然后尝试使用 /etc/resolv.conf 中的每个域对其进行限定,直到找到 DNS 中存在的 FQDN。因此/etc/hosts
和 DNS+/etc/resolv.conf
都是设置“DNS 域名”的替代方法。例如,以下主机条目(以及 的一个::1
):127.0.0.1 nas.lan nas localhost
将导致
hostname -f
报告“nas.lan”。
但是,那NIS 域名称与上述内容无关。它是不是LAN 域名。它不以任何方式或形式与主机名一起使用。它仅由 NIS/YP 客户端软件 (ypbind) 读取,以确定要连接到哪个服务器(如果有多个)。
设置 NIS 域的最直接方法是通过 kernel.domainname
sysctl,通常在/etc/sysctl.conf
或中/etc/sysctl.d/99-local.conf
。与主机名(也有类似的 sysctl)不同,在搜索 Debian init 脚本后,似乎 /etc 中没有专门的文件。