以下是我遵循的步骤:
更改
/etc/hosts
:cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 linux-vm
改变
etc/hostname
cat /etc/hostname linux-vm
重启
TTy 仍然显示旧主机名:
我怎样才能永久地改变它?
答案1
您可能还需要使用 systemd 方式更改主机名:
sudo hostnamectl --static set-hostname servername
此外,Ubuntu 还包含cloud-init
在其后续发行版中,它提供了设置云实例的控制 - 包括设置主机名- 因此,即使您使用上述所有方法更改主机名,但重启后仍然无法生效,则值得检查是否安装了 cloud-init。如果安装了,您有两个选择 - 您可以禁用它(在进行上述主机名更改后):
sudo touch /etc/cloud/cloud-init.disabled
或者您可以创建一个新的用户数据文件并重新加载配置 - 请参阅cloud-init 文档了解详情。
答案2
许多虚拟机主机每次重新启动时都会将您的 /etc/hostname 和 /etc/hosts 文件覆盖为其客户控制面板中配置的内容。
如果可以,请在 VPS 主机的控制面板中配置所需的主机名。
许多人使用的另一种选择(尽管有点黑客行为)是将这些文件标记为不可变的这意味着它们是真正只读的 (甚至由 root 执行)。
这是一个文件属性。Linux 文件系统允许许多文件属性,但很少使用。您可以使用命令(“更改属性”的缩写 - 与更改权限或更改所有权chattr
相反)修改它们。chmod
chown
将文件设置为不可变:
chattr +i filename
清除不可变标志:
chattr -i filename
这种方法在 OpenVZ 平台上是行之有效的,而这些平台最容易出现 /etc/hosts 重写问题。如果您有 Xen 或 KVM/Qemu 等机器级虚拟化,这种方法就不太可能奏效。
答案3
我现在测试了,除了按照您的步骤之外,我所做的如下:
sudo nano /etc/hostname
sudo nano /etc/hosts
我将主机从 更改cyrex
为cyrex2k
并重新启动,然后得到:
cyrex@cyrex2k:~$ hostname
cyrex2k
cyrex@cyrex2k:~$
cyrex@cyrex2k:~$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 cyrex2k
因此,我的建议是检查 IP 是否根据域名进行了验证,以防万一,同时添加您正在使用的虚拟环境。我在使用 VMware 时遇到过类似的问题,因此我改用 VirtualBox 和 QEMU(带 KVM)。