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


497

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

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


3
警告:在默认情况下运行cloud-init(在启动时控制主机名)的Ubuntu 18+上无法使用。
nslntmnx

@nslntmnx,谢谢!
MiB

Answers:


642

这很容易。只需点击Gear图标(位于屏幕右上角),打开“关于此计算机”屏幕(位于Gear图标)并编辑“设备名称”。

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

sudo hostname your-new-name

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

注意

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

sudo -H gedit /etc/hostname

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

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

sudo service hostname start

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

127.0.1.1     your-old-hostname

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


4
我不想重新启动
Deepak Rajput

23
我知道。这就是为什么您应该使用“主机名”命令的原因。我只是想澄清一下,“主机名”命令仅会更改主机名,直到您重新启动/崩溃/等为止。之后,它将再次从文件中读取名称。
jasperado 2011年

5
要看。如果输入命令,则无需重新启动。主机名已经更改。但只有直到您下次重新启动时,才可以。
jasperado 2011年

19
请注意,您还必须更改/etc/hosts(请参阅其他答案)
JB。

9
简而言之,尽管hostname将使新名称立即生效,但除非您也进行更改/etc/hostname,否则它不是“永久的” /etc/hosts,因为这些是重启或崩溃后将读取的文件,当然,您可能不会期待提前。
Tim Parenti 2013年

280

Ubuntu 13.04以上

hostnamectl命令是Desktop和Server版本上默认安装的一部分。

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

hostnamectl set-hostname new-hostname

该命令是systemd-services软件包的一部分(从Ubuntu 14.04开始,该软件包还包括timedatectllocalectl命令)。随着Ubuntu迁移到systemd,该工具将成为未来。


1
请注意,这并非在所有地方都可用。仅查看了我的Ubuntu 14.04 LTS ARM-7安装,hostnamectl并不存在。猜猜一些Ubuntu版本尚未使用systemd。
斯特凡2015年

1
@Stéphane命令是systemd套件的一部分,但它们可独立使用。在这种情况下,13.04-14.10请勿将systemd用作init,因为该命令可用。
muru

1
@ H2ONaCl shell变量是在启动时设置的,只需打开另一个shell,主机名变量就可以了。至于sudo,关于主机名解析的错误实际上并没有阻止我执行任何操作。
muru

1
@ H2ONaCl啊,但是HOSTNAME变量不是标准的-IIRC破折号和ksh没有它,zsh使用HOST,所以就shell变量而言,它是堆的底部。
muru

3
仍可在Ubuntu 18.04 LTS中使用。
LucaM

63

没有重启

不重新启动的情况下更改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。如果您已经使用过sudo, ,在grub菜单上按ESC,选择恢复,然后将您的主机文件编辑为正确的设置)

现在,重新启动后,您的主机名将成为您选择的新主机名

没有重启

要在不重新启动的情况下进行更改,只需在编辑/ etc / hostname之后使用hostname.sh即可。您必须将两个主机名都保留在/ etc / hosts(127.0.0.1 newhost oldhost)中,直到执行以下命令:

sudo service hostname start

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


在Ubuntu 12.10上,最后一部分不适用于以下错误消息sudo: unable to resolve host old-hostname。对于这一部分,@ jesperado解决方案效果很好。
弗雷德里克Grosshans

3
如果不进行更新/etc/hosts,则在12.04.2 LTS上,许多东西会开始失败,包括w命令,Apache /sbin/reboot等。确保更新/etc/hosts
乔什(Josh)2013年

你是指既127.0.0.1localhost127.0.1.1自定义的主机名。对?然后,在您的答案接近尾声的情况下,对于没有改组的操作,请参考/etc/hosts127.0.0.1 newhost oldhost。那么,有没有需要的127.0.1.1地址?
Nikos Alexandris

1
没有为我工作。我必须使用sudo nano /etc/hosts更改才能生效;没有sudo,只是nano /etc/hosts没有保存更改
conman253 '18

2
重新启动和重新启动之间有什么区别?
风暴

43

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

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

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

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

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

对于没有GUI的Ubuntu服务器,请一一运行sudo vi /etc/hostname并对其sudo vi /etc/hosts进行编辑。在两个文件中,将名称更改为所需名称并保存。

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


16

这是一个以指定方式更改主机名的脚本。它确保不仅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}')"

脚本的最后一行是su $SUDO_USER -c "xauth add $(xauth list | sed 's/^.*\//'"$NEW_HOSTNAME"'\//g' | awk 'NR==1 {sub($1,"\"&\""); print}')"做什么的?只是好奇。
Fr0zenFyr 2014年

4
@ Fr0zenFyr:它使用有效的X11身份验证令牌(xauth list),并将旧的主机名替换为新的主机名(sed)。然后awk将引号括在第一个参数之前,xauth add因为xauth的输入和输出格式不对称。
卢卡斯

感谢您的解释。我总是重新启动以使更改生效。+1
Fr0zenFyr 2014年

@trakz:实际上,无论数字是127.abc,根据IETF RFC都是本地主机。(大多数人只是不知道,但大多数人不知道,编辑已批准)
Fabby 2015年

14

不重新启动:

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

使用以下命令检查您当前的主机名 hostname -f


随着16.04点,sysctl sudo: unable to resolve host oldnamesysctl: setting key "kernel.hostname": Read-only file system。可能是因为Proxmox内有CT。
Pablo A

14

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

或完全禁用cloud-init:

sudo touch /etc/cloud/cloud-init.disabled

1
请赞成这个答案。这对我来说很棒。其他答案不适用于cloud-init。
nslntmnx

@nslntmnx是否默认将其安装在18.04台式机上,仅安装在服务器上?桌面没有/etc/cloud/cloud.cfg。包裹名称是什么?只是cloud-init
Ciro Santilli新疆改造中心法轮功六四事件

1
另外,有什么方法可以使用cloud-init更改主机名,而不是仅禁用其覆盖?
Ciro Santilli新疆改造中心法轮功六四事件

1
是的,您可以使用cloud-init更改许多设置-请参阅我的答案中的docs链接-这是设置主机名的链接:cloudinit.readthedocs.io/en/latest/topics/…–
Pierz

7

要获取当前的主机名:

cat /etc/hostname

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


1
或者只是从命令行运行命令“主机名”。
elomage 2015年

4
  1. /etc/hostname所需的主机名替换的内容(您可以使用编辑sudo nano /etc/hostname
  2. 在中/etc/hosts,替换127.0旁边的条目。1 .1使用所需的主机名(您可以使用编辑sudo nano /etc/hosts
  3. 执行 sudo service hostname restart; sudo service networking restart

警告:在默认情况下运行cloud-init(在启动时控制主机名)的Ubuntu 18+上无法使用。
nslntmnx

@nslntmnx您确定吗?我在cloud-config.txt文件中看到 # if you do nothing you'll end up with: # * /etc/hostname (and 'hostname') managed via: 'preserve_hostame: false' # if you do not change /etc/hostname, it will be updated with the cloud # provided hostname on each boot. If you make a change, then manual # maintenance takes over, and cloud-init will not modify it.我目前没有Ubuntu 18,因此直到周末我都无法对其进行测试。
乔治

4

Ubuntu 16.04

这是没有重新启动且没有任何终端使用的。

  • 转到系统设置->详细信息
  • 在那里。在“ 设备名称”旁边,有一个文本框。
  • 编辑文本框并关闭窗口。

打开终端。自己看看。

(对于较旧的版本,该文本框不可编辑。)


4

原始发布者问题的经典答案是,一旦编辑完/etc/hostname,您就可以通过运行主机名(1)并以-F--file)选项为根来使其应用而无需重新启动:

sudo hostname -F /etc/hostname

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


警告:在默认情况下运行cloud-init(在启动时控制主机名)的Ubuntu 18+上无法使用。
nslntmnx

@nslntmnx erm,什么?Ubuntu 18引入了什么新的依赖项来默认引入cloud-init?您可能会想到一些针对云量身定制的映像,在这种情况下,它们运行自定义的云资源调配工具就不足为奇了。
Josip Rodin '18

3
sudo hostname your-new-name
sudo /etc/init.d/networking restart

那应该做我认为的工作


5
我不认为这会生存重启
科林安德森

警告:在默认情况下运行cloud-init(在启动时控制主机名)的Ubuntu 18+上无法使用。
nslntmnx

3

我已经阅读了答案,但我认为您可能正在寻找:

编辑/etc/hostname文件后只需执行这两个命令。

$ sudo service hostname restart
$ exec bash

就这样。无需重新启动。还要确保您还更改了/etc/hosts文件名。


与许多其他答案不同,它不会更新/etc/hosts(我在14.04上确认)。
IsaacS

警告:在默认情况下运行cloud-init(在启动时控制主机名)的Ubuntu 18+上无法使用。
nslntmnx

2

Ubuntu 16.04

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

编辑主机文件。

$ sudo nano /etc/hosts

用新名称替换旧名称

127.0.0.1 localhost newname

设置新的主机名。

$ sudo hostnamectl set-hostname newname


警告:在默认情况下运行cloud-init(在启动时控制主机名)的Ubuntu 18+上无法使用。
nslntmnx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.