操作环境
master@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial
报错背景
我在控制台中使用 sudo
提升权限进行一些操作时,回车之后,系统需要经过比平时稍长的时间才会弹出要我输入 ROOT 账户密码的提示,而且正确地输入 ROOT 账户的密码之后,预期的命令并没有执行,而是返回如下的错误提示:
sudo: unable to resolve host ubuntu
例如:
master@ubuntu:~$ sudo cp -p /var/lib/dpkg/status status.bak0 sudo: unable to resolve host ubuntu
解决过程
报错信息的大致含义是“无法解析主机 ubuntu”,其中 “ubuntu” 是我的主机名。我们可以通过 hostname
命令查看当前的主机名:
master@ubuntu:~$ hostname ubuntu
由于 hostname
命令是从 /etc/hostname
文件中获取到的主机名,因此,直接查看该文件也可以获知当前的主机名:
master@ubuntu:~$ cat /etc/hostname ubuntu
如上两次检查都显示当前的主机名是 ubuntu
. 根据 Ubuntu 系统以及其他类似 Ubuntu 的系统的特性,这时 /etc/hosts
中也应该有 ubuntu
这个主机名的记录。但是,当我查看 /etc/hosts
这个文件时,却发现其中并没有该记录:
master@ubuntu:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.0.1 v.dhg.wiki # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
问题应该就出这里(后面的操作完成后可以确定问题确实出在这里),但是 /etc/hosts
是只有 ROOT 权限才能编辑的文件,sudo
目前又不能用,因此只能使用 su root
, 由普通用户切换到 ROOT 用户,之后,编辑 /etc/hosts
, 写入如下内容:
127.0.0.1 ubuntu
注意:上面命令中的 ubuntu
是我的主机名,你在操作时要替换成自己的主机名。
之后,保存退出。修改完成之后的 /etc/hosts
文件大致是这样的:
master@ubuntu:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.0.1 v.dhg.wiki 127.0.0.1 ubuntu # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
之后测试发现 sudo
已经可以正常使用。
至此,问题解决。
EOF