我一直无法完全理解如何更改 Linux 主机名和域名,现在它又回来咬我了——我的 Linux 域名是空白的(domainname
给出(none)
),我就是无法将其改回来:
$ hostname
coral
$ hostname -f
coral
$ hostname -d
$ hostname -d | wc
0 0 0
$ domainname
(none)
$ dnsdomainname
$ dnsdomainname | wc
0 0 0
$ cat /etc/hostname
coral
$ head -1 /etc/hosts
127.0.0.1 localhost.my.domain.org localhost
$ cat /etc/resolv.conf
# Fixed resolv.conf file
domain my.domain.org
search my.domain.org
nameserver 192.168.2.102
$ time dig coral
;; ANSWER SECTION:
coral. 0 IN A 192.168.2.102
real 0m0.038s
user 0m0.032s
sys 0m0.004s
我已经重启了好几次了,我的域名现在还是空白的。以上是几次重启后的结果。
添加更多细节。
- 使用主机名别名来
/etc/hosts
指定 FQDN 似乎是正确的答案,但是,我已经这样做了,参见上面的localhost.my.domain.org
条目。我没有输入我的主机名 (coral),/etc/hosts
因为我不想将我的主机名解析为127.0.0.1
真实 IP,而是将其解析为我从 DNS 服务器获取的真实 IP。 - 我对 进行了跟踪
hostname -f
,但无法从日志中找出任何问题。如果有人感兴趣,我可以把它放在这里。
结果,启动和停止我的 sendmail 服务器会出现很大的网络延迟。
更新:
今天,hostname -f
、hostname -d
&dnsdomainname
现在都正常工作了。我什么也没做,只是再次跟踪了hostname -f
。我应该跟踪到一个新文件,但我没有。所以现在它可以正常工作了,但我仍然不知道为什么它现在可以工作,以及为什么它以前不工作。此外,即使一切正常,我的sysctl kernel.domainname
仍然报告(none)
。这太奇怪和复杂了。
$ uptime
21:33:36 up 2 days, 1:36, 5 users, load average: 0.22, 0.43, 0.29
$ sysctl kernel.domainname
kernel.domainname = (none)
并且上述连接到我的 sendmail 服务器的 (网络) 延迟也消失了。所以我的结论是我上面所做的都是正确的,但不知何故,我的 Ubuntu 17.04 却花费了大量时间才实现它。
无论如何我都会接受Giacomo1968 的回答因为他对于如何使用sysctl
和有一些新的东西kernel.hostname
。
感谢所有帮助过的人!
答案1
我处理它的方式是这样的;假设你的主机名是covfefe
。首先运行此命令:
sudo hostname covfefe
然后编辑/etc/hostname
并更改其中的值:
sudo nano /etc/hostname
最后用如下方式检查您的主机名sysctl
:
sysctl kernel.hostname
如果值不是covfefe
,则将其更改为covfefe
如下形式:
sudo sysctl kernel.hostname=covfefe
答案2
要在 Debian 中设置域名,您可以编辑。对于域中的/etc/hostname
主机,您只需将其设置为。这也适用于大多数其他 Linux 发行版。hulefu
somewhere.co.uk
/etc/hostname
hulefu.somewhere.co.uk
现在hostname -d
应该给出somewhere.co.uk
答案。
更新:您可以改为向 添加域别名/etc/hosts
。按照前面的示例,这将是 的第一行/etc/hosts
:127.0.0.1 localhost localhost.somewhere.co.uk
我认为直接设置内核参数应该是最后手段。