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

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

评论

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

@nslntmnx,谢谢!

#1 楼

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

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

sudo hostname 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


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

评论


我不想重启

– Deepak Rajput
2011年12月15日,下午3:12

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

–贾斯珀拉多
2011-12-16在0:31



依靠。如果输入命令,则无需重新启动。主机名已更改。但是只有在您下次重启时才进行。

–贾斯珀拉多
2011-12-16 14:32

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

– JB。和莫妮卡
13年2月25日在15:50

简而言之,尽管主机名将使新名称立即生效,但它不是“永久的”,除非您还更改了/ etc / hostname和/ etc / hosts,因为这些是在重启或崩溃后将被读取的文件。 ,当然,您可能没想到会提前。

–蒂姆·帕特里(Tim Parenti)
13年7月25日在15:05

#2 楼

Ubuntu 13.04及更高版本

hostnamectl命令是台式机和服务器版默认安装的一部分。

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

hostnamectl set-hostname new-hostname


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

评论


请注意,这并非在所有地方都可用。只是查看了我的Ubuntu 14.04 LTS ARM-7安装,并且hostnamectl不存在。猜猜一些Ubuntu版本还没有使用systemd。

–Stéphane
2015年7月6日在2:52

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

–muru
15年7月6日在5:05

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

–muru
17年1月31日在13:57

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

–muru
17年1月31日在14:14

仍可在Ubuntu 18.04 LTS中使用。

– LucaM
18年6月15日在15:30

#3 楼

不重新启动

不重新启动就在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 12.10上,最后一部分不适用于以下错误消息sudo:无法解析主机old-hostname。对于这一部分,@ jesperado解决方案效果很好。

–FrédéricGrosshans
2012年11月23日10:54

如果不更新/ etc / hosts,则在12.04.2 LTS上,许多东西会开始失败,包括w命令,Apache,/ sbin / reboot等。确保更新/ etc / hosts

–乔什
13年8月13日在20:10

对于本地主机,请参阅127.0.0.1,对于自定义主机名,请参阅127.0.1.1。对?然后,在答案结尾处,对于没有rebot的操作,请引用/ etc / hosts和127.0.0.1 newhost oldhost。因此,是否不需要127.0.1.1地址?

– Nikos Alexandris
15年12月19日在11:22

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

– conman253
18年1月30日在23:30



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

–风暴
18年4月18日在11:45

#4 楼

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


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


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



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

sudo -H gedit /etc/hostname和对于没有GUI的Ubuntu服务器,请运行sudo -H gedit /etc/hostssudo vi /etc/hostname并逐一编辑它们。
在两个文件中,将名称更改为所需名称并保存。

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

#5 楼

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


评论


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

–空
'18 Sep 1'在7:08

@nslntmnx是否默认将其安装在18.04台式机上,仅安装在服务器上?桌面没有/etc/cloud/cloud.cfg。包裹名称是什么?只是云初始化?

– Ciro Santilli郝海东冠状病六四事件法轮功
18-10-30在9:27



此外,有什么方法可以使用cloud-init更改主机名,而不是仅禁用其覆盖?

– Ciro Santilli郝海东冠状病六四事件法轮功
18-10-30在9:33

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

–皮尔兹
18-10-30在10:32

如果您不想禁用它,但是想要更改主机名:sudo cloud-init clean && sudo nano / var / lib / cloud / seed / nocloud * / user-data(更新“主机名:”)-重新启动。

– bshea
4月5日18:11



#6 楼

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

用法:sudo ./change_hostname.sh new-hostname

 #!/usr/bin/env bash
NEW_HOSTNAME=
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(,"\"&\""); print}')"
 


评论


脚本su $ SUDO_USER -c“ xauth add $(xauth list | sed's /^.*\//'"$ NEW_HOSTNAME”'\ // g'| awk'NR == 1 {sub ($ 1,“ \”&\“”);打印}')“吗?只是好奇。

–Fr0zenFyr
2014年10月10日在12:22

@ Fr0zenFyr:它使用有效的X11身份验证令牌(xauth列表),并将旧的主机名替换为新的主机名(sed)。然后,由于xauth的输入和输出格式不对称,因此awk将引号放在xauth add的第一个参数周围。

–卢卡斯
2014年11月11日21:36

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

–Fr0zenFyr
2014年3月12日下午4:02

@trakz:实际上,无论数字是127.a.b.c,根据IETF RFC都是本地主机。 (大多数人只是不知道这一点,但大多数人不知道,编辑已批准)

–法比
2015年1月7日在21:25

#7 楼

不重新启动:


更改/etc/hostname中的主机名

相应更新/etc/hosts
sudo sysctl kernel.hostname=mynew.local.host

hostname -f检查当前主机名

评论


对于16.04,sysctl sudo:无法解析主机旧名称,sysctl:设置键“ kernel.hostname”:只读文件系统。可能是因为Proxmox内有CT。

–巴勃罗·比安奇(Pablo Bianchi)
18年5月22日在22:44

#8 楼

获取当前主机名:

cat /etc/hostname


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

评论


或者只是从命令行运行命令“主机名”。

– elomage
2015年10月1日13:28

#9 楼


用所需的主机名替换/etc/hostname的内容(可以使用sudo nano /etc/hostname进行编辑)
/etc/hosts中,将127.0.1.1旁边的条目替换为所需的主机名(可以使用sudo nano /etc/hosts进行编辑)
执行sudo service hostname restart; sudo service networking restart



评论


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

–空
'18 Sep 1'在7:04

@nslntmnx您确定吗?我在cloud-config.txt中看到#如果不执行任何操作,最终将得到:#* / etc / hostname(和'hostname')通过以下方式管理:'preserve_hostame:false'#如果您不更改/ etc /主机名,它将在每次引导时使用提供的云#主机名进行更新。如果您进行更改,则手动维护将接管工作,cloud-init不会对其进行修改。我目前没有Ubuntu 18,所以直到周末我才能对其进行测试。

–乔治
18/09/5在20:27



#10 楼

Ubuntu 16.04

这没有重启,也没有任何终端使用。


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

打开终端。请自行查看。

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

#11 楼

原始海报问题的经典答案是,一旦编辑了/etc/hostname,您就可以通过以root身份使用-F--file)选项运行hostname(1)来使其应用而无需重新启动: br />
使用/etc/hostname和上述程序处理的hostname(5)在Debian及其衍生版本中已经使用了二十多年,并且提供该软件包的标签已被标记为必不可少和必需,并且IIRC初始化脚本几十年来一直在使用相同的东西(/etc/init/hostname.conf仍然包含它),所以我不得不说,我真的很困惑,为什么没人会提到这一点:)

评论


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

–空
'18 Sep 1'在7:04

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

–乔斯普·罗丹(Josip Rodin)
'18 Sep 1'在11:02

#12 楼

Ubuntu 16.04

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

编辑主机文件。

$ sudo nano /etc/hosts

替换旧名称新的主机名。

127.0.0.1 localhost newname

设置新的主机名。

$ sudo hostnamectl set-hostname newname

评论


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

–空
'18 Sep 1'在7:08

#13 楼

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


那应该做我认为的工作

评论


我认为这不会在重启后继续存在

–科林·安德森(Collin Anderson)
2014-09-15 15:54

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

–空
'18 Sep 1'在7:04

#14 楼

我已经阅读了答案,但是我想您可能正在寻找它:

编辑/etc/hostname文件后只需执行以下两个命令即可。

$ sudo service hostname restart
$ exec bash


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

评论


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

–IsaacS
18年5月22日在0:19

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

–空
'18 Sep 1'在7:04