问题描述
我想更改操作系统主机名,但我不想重新启动。
我已经编辑了 /etc/hostname
,但它需要重新启动才能实现。如何避免这种情况?
最佳答案
这很简单。只需单击齿轮图标(位于屏幕右上角),打开“关于这台计算机”屏幕(位于齿轮图标)并编辑 “Device name”。
或者,在终端中,使用以下命令:
sudo hostname your-new-name
这会将主机名设置为 your-new-name,直到您重新启动。有关详细信息,请参阅 man hostname
和 How do I change the computer name?。不要在您的名字中使用 _
。
笔记
重新启动后,将使用 /etc/hostname
中的更改,因此(如您在问题中所说),您仍应使用
sudo -H gedit /etc/hostname
(或其他一些编辑器)以便该文件包含主机名。
要测试文件是否设置正确,请运行:
sudo service hostname start
您还应该编辑 /etc/hosts
并更改以下行:
127.0.1.1 your-old-hostname
这样它现在包含您的新主机名。 (这是必需的,否则许多命令将停止运行。)
次佳答案
Ubuntu 13.04 以上版本
hostnamectl
命令是桌面版和服务器版默认安装的一部分。
它结合了通过 hostname
命令设置主机名和编辑 /etc/hostname
。除了设置静态主机名,它还可以设置 “pretty” 主机名,这在 Ubuntu 中没有使用。不幸的是,编辑 /etc/hosts
仍然需要单独完成。
hostnamectl set-hostname new-hostname
此命令是 systemd-services
包的一部分(从 Ubuntu 14.04 开始,该包还包括 timedatectl
和 localectl
命令)。随着 Ubuntu 迁移到 systemd
,这个工具就是未来。
第三种答案
无需重启
在不重启的情况下更改 ubuntu 中的主机名或计算机名
编辑 /etc/hostname
并更改为新值,
nano /etc/hostname
编辑 /etc/hosts
并将旧的 127.0.1.1 行更改为您的新主机名
127.0.0.1 localhost
127.0.1.1 ubuntu.local ubuntu # change to your new hostname/fqdn
注意:我已经在论坛上阅读过>编辑 /etc/hosts
并将旧的 127.0.1.1 行更改为您的新主机名(如果您不这样做,您将无法再使用 sudo
。如果您已经这样做,请在 grub 菜单上按 ESC,选择恢复,然后将主机文件编辑为正确的设置)
现在重启后,您的主机名将是您选择的新主机名
无需重启
要在不重启的情况下进行更改,您可以在编辑 /etc/hostname
后使用 hostname.sh。在执行以下命令之前,您必须将两个主机名都保存在 /etc/hosts
(127.0.0.1 newhost oldhost) 中:
sudo service hostname start
注意:以上命令使更改生效。保存在此文件 (/etc/hostname
) 中的主机名将在系统重启时保留(并将使用相同的服务设置)。
第四种答案
默认名称是在安装 Ubuntu 时设置的。您可以轻松地将它更改为您想要的任何桌面和应用程序。服务器通过编辑主机和主机名文件。以下是方法:
-
按键盘上的
Ctrl
Alt
t
打开终端。打开后,运行以下命令:sudo hostname NEW_NAME_HERE
这将更改主机名,直到下次重新启动。更改不会立即在您当前的终端中可见。启动一个新终端以查看新主机名。
-
要永久更改名称,请运行命令编辑主机文件:\n
sudo -H gedit /etc/hostname
和sudo -H gedit /etc/hosts
对于没有 GUI 的 Ubuntu 服务器,运行 sudo vi /etc/hostname
和 sudo vi /etc/hosts
并逐个编辑它们。\n在这两个文件中,将名称更改为您想要的名称并保存它们。
最后,重新启动计算机以应用更改。
第五种答案
Cloud-init (Ubuntu 18+) 主机名持久性
虽然上述方法( hostnamectl
、 etc/hostname
等)适用于立即更改主机名,但随着 cloud-init 的出现——它可以控制主机名的设置——以及其他许多事情。因此,如果安装了 cloud-init,它在重启后不会卡住。如果您希望更改在重启后保留,那么您需要编辑 cloud-init config files ,禁用 cloud-init 的 hostname set/update module :
sudo sed 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg
或完全禁用 cloud-init:
sudo touch /etc/cloud/cloud-init.disabled
第六种答案
这是一个以规定方式更改主机名的脚本。它确保不仅 sudo
,而且 X11 应用程序都可以继续运行而无需重新启动。
用法:sudo ./change_hostname.sh new-hostname
#!/usr/bin/env bash
NEW_HOSTNAME=$1
echo $NEW_HOSTNAME > /proc/sys/kernel/hostname
sed -i 's/127.0.1.1.*/127.0.1.1\t'"$NEW_HOSTNAME"'/g' /etc/hosts
echo $NEW_HOSTNAME > /etc/hostname
service hostname start
su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"
第七种答案
无需重启:
-
更改
/etc/hostname
中的主机名 -
相应地更新
/etc/hosts
-
sudo sysctl kernel.hostname=mynew.local.host
使用 hostname -f
检查您当前的主机名
第八种答案
要获取您当前的主机名:
cat /etc/hostname
这可以在任何文本编辑器中更改。您还需要根据 /etc/hosts 中的 127.0.0.1 更新 localhost 以外的条目。
第九种答案
原始发布者问题的经典答案是,一旦您编辑了 /etc/hostname
,您就可以通过以根用户身份运行带有 -F
( --file
) 选项的 hostname(1) 使其在不重新启动的情况下应用:
sudo hostname -F /etc/hostname
hostname(5) 与 /etc/hostname
的处理和上述程序在 Debian 及其衍生产品中已经使用了二十多年,the package providing it 被标记为 essential 和 required ,并且 IIRC 初始化脚本几十年来一直使用相同的东西( /etc/init/hostname.conf
仍然包含它), 所以我不得不说我真的很困惑怎么没人提到过这个:)
第十种答案
Ubuntu 16.04
基于 DigitalOcean 社区的 answer 的解决方案。
编辑主机文件。
$ sudo nano /etc/hosts
将旧名称替换为新名称。
127.0.0.1 localhost newname
设置新的主机名。
$ sudo hostnamectl set-hostname newname