原生的 Ubuntu20.04.5-base
使用 sudo
会出现无法解析主机的问题。通常,在更改系统的主机名之后也会发生此错误。
主机名
主机名是用于标识网络上设备的标签。 您不应该在同一网络上拥有相同主机名的计算机。主机名分别是以下三类:
static
主机名,即传统的主机名。 主机名存储在/etc/hostname
文件中,可以由用户设置。pretty
主机名用于向用户展示的自由格式UTF8字符编码的主机名。 例如Zou's WorkStation
。transient
主机名由内核维护的动态主机名。 DHCP或mDNS服务器可以在运行时更改临时的主机名。 默认情况下,它与static主机名相同。
对于
static
和transient
名称,例如host.example.com
,建议使用完全限定的域名FQDN
。
查看当前主机名
执行以下 hostnamectl
命令。在此示例中,默认主机名为 localhost.localdomain
:
1 | hostname |
1 | hostnamectl |
hostnamectl更改主机名
在 Ubuntu
和其它使用 systemd
作为初始化的程序的 Linux
发行版中,可以使用 hostnamectl
命令更改系统主机名。hostnamectl
命令语法如下:
1 | sudo hostnamectl set-hostname host.example.com |
例如,要将系统 static
主机名更改为 host.zhzh.xyz
,可以使用以下 hostnamectl
命令:
1 | sudo hostnamectl set-hostname host.zhzh.xyz |
要将 pretty
主机名设置为 Zou's WorkStation
,请输入:
1 | sudo hostnamectl set-hostname "Zou's WorkStation" --pretty |
hostnamectl
命令不产生任何输出。 成功时返回 0
,否则返回非零失败代码。要验证主机名是否已成功更改,再次运行 hostnamectl
命令查看即可。
sudo: sudo unable resolve host XXX
接下来,运行以下命令来错误依然会存在:
1 | sudo |
简单来说,hostname 命令无法解析系统的主机名。由于这是一台本地计算机,并且在 DNS 中没有这样的记录。
修复错误
为了修复错误,需要在系统本地添加 DNS
记录。本地 DNS
记录存储在 /etc/hosts
中。
首先,使用以下命令登录到 root
用户:
1 | su - root |
接下来,编辑 /etc/hosts
文件的内容:
1 | vim /etc/hosts |
添加以下内容:
1 | 127.0.0.1 localhost.localdomain localhost |
默认系统中是连 localhost
这样的记录都不存在的。所以由于缺少主机名并且系统无法找出主机名,因此会引发“无法解析主机”的错误。
要修复此错误,在 /etc/hosts 文件中,将主机名设置为环回地址 (127.0.0.1)即可修复这个错误。