如何在不重新启动的情况下更改主机名?

Dee*_*put 532 hostname restart

我想更改操作系统主机名,但不想重新启动。

我已经编辑过,/etc/hostname但它需要重新启动才能实施。如何避免这种情况?

jas*_*ado 673

这很简单。只需单击齿轮图标(位于屏幕右上角),打开“关于这台计算机”屏幕(位于齿轮图标)并编辑“设备名称”。

或者,在终端中,使用以下命令:

sudo hostname your-new-name
Run Code Online (Sandbox Code Playgroud)

这会将主机名设置为 your-new-name,直到您重新启动。请参阅man hostname以及如何更改计算机名称?了解更多信息。不要_以您的名义使用。

笔记

重新启动/etc/hostname后将使用您的更改,因此(正如您在问题中所说),您仍然应该使用

sudo -H gedit /etc/hostname
Run Code Online (Sandbox Code Playgroud)

(或其他一些编辑器)以便该文件包含主机名。

要测试文件设置是否正确,请运行:

sudo service hostname start
Run Code Online (Sandbox Code Playgroud)

您还应该编辑/etc/hosts和更改以下行:

127.0.1.1     your-old-hostname
Run Code Online (Sandbox Code Playgroud)

以便它现在包含您的新主机名。(这是必需的,否则许多命令将停止运行。)

  • 我知道。这就是您应该使用“主机名”命令的原因。我只是想澄清一下,“主机名”命令只会在您重新启动/崩溃/等之前更改主机名。之后它将再次从文件中读取名称。 (25认同)
  • 请注意,您还必须更改`/etc/hosts`(请参阅其他答案) (19认同)
  • 简而言之,虽然 `hostname` 会导致新名称立即生效,但它不是“永久的”,除非你同时更改 `/etc/hostname` 和 `/etc/hosts`,因为这些是将被读取的文件在重新启动或崩溃之后,当然,您可能不会提前预期。 (11认同)
  • 我不想重启 (5认同)
  • 要看。如果您输入了该命令,则无需重新启动。主机名已更改。但只有直到您下一次重新启动。 (5认同)

mur*_*uru 301

Ubuntu 13.04 以上

hostnamectl命令是桌面版和服务器版默认安装的一部分。

它结合了通过hostname命令设置主机名和编辑/etc/hostname. 除了设置静态主机名外,它还可以设置“漂亮”的主机名,这在 Ubuntu 中没有使用。不幸的是,编辑/etc/hosts仍然必须单独进行。

hostnamectl set-hostname new-hostname
Run Code Online (Sandbox Code Playgroud)

这个命令是systemd-services包的一部分(从 Ubuntu 14.04 开始,它还包括timedatectllocalectl命令)。随着 Ubuntu 迁移到systemd,这个工具是未来。

  • 仍然适用于 Ubuntu 18.04 LTS。 (4认同)
  • @H2ONaCl shell 变量在启动时设置,只需打开另一个 shell,主机名变量应该没问题。至于 sudo,关于主机名解析的错误实际上从未阻止我做任何事情。 (2认同)

One*_*ero 64

无需重启

在 ubuntu 中更改主机名或计算机名而无需重新启动

编辑 /etc/hostname 并更改为新值,

nano /etc/hostname 
Run Code Online (Sandbox Code Playgroud)

编辑 /etc/hosts 并将旧的 127.0.1.1 行更改为您的新主机名

127.0.0.1   localhost
127.0.1.1   ubuntu.local    ubuntu   # change to your new hostname/fqdn
Run Code Online (Sandbox Code Playgroud)

注意:我已经在论坛上阅读过 > 编辑 /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
Run Code Online (Sandbox Code Playgroud)

注意:以上命令使更改生效。保存在此文件 (/etc/hostname) 中的主机名将在系统重新启动时保留(并将使用相同的服务进行设置)。

  • 如果你不更新 `/etc/hosts`,在 12.04.2 LTS 上很多事情就会开始失败,包括 `w` 命令、Apache、`/sbin/reboot` 等等。**确保更新`/etc/hosts`** (3认同)
  • restart 和 reboot 和有什么不一样? (3认同)

Moh*_*Gh. 44

默认名称是在安装 Ubuntu 时设置的。通过编辑主机和主机名文件,您可以在桌面和服务器中轻松将其更改为您想要的任何内容。下面是方法:

  1. CtrlAltt键盘打开终端。当它打开时,运行以下命令:sudo hostname NEW_NAME_HERE

这将更改主机名,直到下次重新启动。更改不会立即在您当前的终端中可见。启动一个新终端以查看新主机名。

  1. 要永久更改名称,请运行命令来编辑主机文件:

    sudo -H gedit /etc/hostnamesudo -H gedit /etc/hosts

对于Ubuntu的服务器没有GUI,运行sudo vi /etc/hostnamesudo vi /etc/hosts和编辑他们一个接一个。在这两个文件中,将名称更改为您想要的名称并保存它们。

最后,重新启动计算机以应用更改。


Pie*_*erz 20

Cloud-init (Ubuntu 18+) 主机名持久化

虽然上述方法(hostnamectletc/hostname等)适用于立即更改主机名,但随着cloud-init的出现- 它可以控制主机名的设置 - 以及许多其他事情。因此,如果安装了 cloud-init,它不会在重新启动后粘住。如果您希望更改在重新启动后保留,那么您需要编辑cloud-init 配置文件,禁用 cloud-init 的主机名设置/更新模块

sudo sed 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg
Run Code Online (Sandbox Code Playgroud)

或完全禁用 cloud-init:

sudo touch /etc/cloud/cloud-init.disabled
Run Code Online (Sandbox Code Playgroud)


Luc*_*cas 17

这是一个以规定方式更改主机名的脚本。它不仅可以确保sudoX11 应用程序继续运行,而无需重新启动。

用法: 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}')"
Run Code Online (Sandbox Code Playgroud)

  • @Fr0zenFyr:它需要一个有效的 X11 身份验证令牌(`xauth list`)并用新主机名(`sed`)替换旧主机名。然后`awk` 在`xauth add` 的第一个参数周围加上引号,因为`xauth` 的输入和输出格式不对称。 (4认同)

Tom*_*art 14

无需重启:

  1. 更改主机名 /etc/hostname
  2. 更新/etc/hosts相应
  3. sudo sysctl kernel.hostname=mynew.local.host

检查您当前的主机名 hostname -f


tag*_*her 7

要获取您当前的主机名:

cat /etc/hostname
Run Code Online (Sandbox Code Playgroud)

这可以在任何文本编辑器中更改。您还需要针对 /etc/hosts 中的 127.0.0.1 更新除 localhost 以外的条目。


Jos*_*din 6

对原始发帖者问题的经典回答是,一旦编辑了/etc/hostname,就可以通过以 root 身份运行带有( ) 选项的hostname(1)来应用它,而无需重新启动:-F--file

sudo hostname -F /etc/hostname
Run Code Online (Sandbox Code Playgroud)

二十多年来,处理上述程序的主机名(5)在 Debian 及其衍生版本中一直是相同的,提供它的软件包已被标记为Essentialrequired,并且 IIRC 的初始化脚本实际上使用了相同的东西几十年了(仍然包含它),所以我不得不说我真的很困惑为什么没有人提到这一点:)/etc/hostname/etc/init/hostname.conf


Jek*_*kis 5

Ubuntu 16.04

基于来自 DigitalOcean 社区的答案的解决方案。

编辑主机文件。

$ sudo nano /etc/hosts

用新名称替换旧名称

127.0.0.1 localhost newname

设置新主机名。

$ sudo hostnamectl set-hostname newname