如何更改计算机名称?

当我连接到我的服务器(ubuntu server 10.10)时,我会看到这个:
name@server-name.belkin ~>

如何移除“.belkin”?

1尝试编辑/etc/hosts文件。使用gksudo gedit /etc/hosts命令,将server-name.belkin替换为您想要的任何名称。 - LFC_fan
2你想要更改实际的服务器名称,还是只是更改在提示中显示的方式? - Dave Jennings
2投票重新开放,因为这是一个超集(允许重新开始)。 - Ciro Santilli OurBigBook.com
这个问题如何在一个一年之后提出的问题的支持下关闭? - warren
@warren 目前的共识是根据“质量”来关闭:http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-its-much-newer-and-ha 由于“质量”无法衡量,我只看赞同票数。;-) 很可能取决于哪个问题在标题上命中了最佳的新手谷歌关键词。 - Ciro Santilli OurBigBook.com
警告:不适用于默认情况下运行 cloud-init 的 Ubuntu 18+,该程序在启动时控制主机名。 - null
14个回答

你需要在两个文件中编辑计算机名称。
/etc/hostname 

并且

/etc/hosts

这两个都需要管理员访问权限,因此运行
gksu gedit /path/to/file

将现有计算机名称的所有实例替换为新的计算机名称。完成后运行。
sudo service hostname start

如果您重新启动计算机,名称也将更改。
另请参阅:
- [如何在不重新启动的情况下更改主机名?](link1)

46之后只需执行 sudo service hostname restart,主机名就可以在无需重启的情况下更改。 - Anthony O.
6在Ubuntu 14.04中没有'hostname'服务。我该如何避免重新启动呢? - Arpad Horvath
1@ArpadHorvath status --system hostname 告诉我服务是存在的。所以,sudo service hostname restart 或者 sudo restart hostname 应该有效。你可能运行了 service hostname status 但找不到它。点击这里了解原因。 - user180409
@BrunoNova 两者都不起作用。 - Arpad Horvath
8在AWS上安装的Ubuntu Server 14.04中,默认情况下 sudo service hostname restart 无效。我不得不进行完整的服务器重启。 - gerrytan
1很奇怪。我在两个14.04和14.10的虚拟机(桌面版)中更改了主机名后使用了这些命令,它起作用了。但我可能应该说sudo service hostname start(而不是restart),因为status --system hostname返回hostname stop/waiting。此外,当前终端没有显示新的主机名,我必须打开一个新的终端或shell才能看到它。 - user180409
9在14.04版本上,我只是简单地运行了sudo hostname命令,这就解决了问题。我没有立即注意到任何变化,但当我打开一个新的终端时,我发现我的主机名确实已经改变了。 - TSJNachos117
14sudo hostname new-host-name 在我使用的 Ubuntu 13.10 上有效。 - Lekhnath
215.10那天,执行sudo service hostname restart命令失败了,显示错误信息为Failed to restart hostname.service: Unit hostname.service is masked. - Ciro Santilli OurBigBook.com
@Lekhnath 注意:这只在下次重启之前有效。 - Ciro Santilli OurBigBook.com
如何将更改传播到我的家用路由器的DNS服务器? - Abhishek Anand
1我在/etc/hosts文件中看到了127.0.0.1 localhost,但是旧的主机名在哪里呢? - Dejel
如果/etc/hosts文件中没有包含机器名称,会发生什么情况? - 2540625
@ThomasWard 我确实这样做了,但错误仍然存在。 - KeyC0de
1/etc/hosts文件中写什么?为什么没有人明确地说这个? - Dims
@ Dims,答案中写道将任何现有计算机名称的实例替换为新名称 - richzilla
1@richzilla 默认情况下 hosts 中不存在现有计算机名称的实例。 - Dims
尝试执行 sudo service hostname startsudo hostname 时出现 "无法解析主机" 的错误。我正在使用 Ubuntu 16.04 LTS。 - Fabián
@Fabián 确保 /etc/hosts 已经被修改。 - E235
1警告:不适用于默认运行cloud-init的Ubuntu 18+,该程序在启动时控制主机名。 - null

hostnamectl set-hostname 在13.10+桌面上

如果您使用的是systemd(从13.10开始),并且cloud-init未激活(请参见下文),这是最佳方法:

hostnamectl set-hostname 'new-hostname'

它:

  • 不需要重新启动
  • 在重启后仍然存在

更多信息请参考:https://askubuntu.com/a/516898/52975

18.04及以后版本:cloud-init

18.04引入了cloud-init,可以控制主机名的设置,因此如果安装了cloud-init,则hostnamectl更改在重启后将不会保留。待办事项:如何检查是否已安装,它是否默认安装在桌面镜像上还是只有服务器上?

如果您希望hostnamectl的更改在重启后保留,那么您需要编辑cloud-init配置文件,禁用cloud-init的主机名设置/更新模块

sudo sed -i 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg

或者完全禁用cloud-init:
sudo touch /etc/cloud/cloud-init.disabled

另请参阅:如何在无需重启的情况下更改主机名?

4在14.04版本中不会更改/etc/hosts文件。 - Autodidact
@SandeepDatta 感谢您的反馈。您希望这个被改变吗?我不确定它是如何工作的,但在我测试过后,重启后效果是永久的。 - Ciro Santilli OurBigBook.com
7在Ubuntu 16.04上完美运行...非常感谢 - creative
2在16.10版本中已确认正常工作。 - fuzzygroup
2我不得不将我的新主机名添加到/etc/hosts文件中,否则使用sudo命令会出现错误提示"sudo: unable to resolve host xxxxx"。 - WoodyDRN
1对我有用。后来我遇到了一些“sudo: 无法解析主机...”的错误。在这里阅读之后:https://askubuntu.com/questions/59458/error-message-sudo-unable-to-resolve-host-user 我检查了 /etc/hosts 文件,发现它还是旧的主机名。我将 /etc/hosts 中的主机名改为当前的主机名后,一切都正常工作了。 - E235
在一个带有systemd 229的Ubuntu Server 16.04.4上,返回了"无法设置属性:连接超时"。这里systemd说要往下看,也许是这里(还有Red Hat上)。 - Pablo Bianchi
警告:不适用于默认情况下运行 cloud-init 的 Ubuntu 18+,该工具控制启动时的主机名。 - null
2在Ubuntu 20 LTS桌面上工作时,只需使用sudo hostnamectl set-hostname myNewName命令。在新终端和重启后,myNewName将成为主机名,没有任何问题。 - Peter Krauss
1在Ubuntu 20.04上运行得非常顺畅。 - magic_al
2在Ubuntu 22.04上完美运行。 - Rinto George

很简单:

  1. 编辑 /etc/hostname,进行名称更改,保存文件。

  2. 还应该在 /etc/hosts 文件中进行相同的更改。

  3. 运行 sudo service hostname start

只要您没有依赖于“旧”主机名的应用程序设置,就应该没问题;-)


32警告:如果您这样做而不相应更改/etc/hosts文件,您将无法使用sudo,因为您的主机名将无法查找。 - João Pinto
关于编辑/etc/hosts,你是对的,我忘了它(刚刚把它加到我的答案中),尽管sudo在没有更改的情况下似乎对我来说工作正常(我已经重新启动了机器,它仍然有效)。 - Pavlos G.
我的/etc/hosts文件中没有任何关于我的主机名(新的或旧的)的参考,只有本地主机和一些IPv6规则。 - Oli
networkmanager会自动添加它,至少在我的机器上是这样的。 - Pavlos G.
我有Xubuntu 10.10,当进行第二步时,它告诉我运行sudo service hostname restart - Andrei Vajna
1没问题,你可以这样做,因为hostname现在是由upstart管理的一个服务。它会执行完全相同的操作,重新启动该服务。 - Pavlos G.
2注意:这对于Ubuntu 14.x不起作用,因为hostname不再位于init.d中。 - Rápli András
如果您发现无法重新启动“hostname”,请使用“sudo reboot”重新启动计算机。 - starbeamrainbowlabs
sudo: /etc/init.d/hostname: command not found - chovy
你在/etc/hosts中所说的"same changes"是什么意思?这个文件的格式完全不同! - Dims
1Ubuntu 16.04 LTS:无法启动hostname.service: Unit hostname.service已被屏蔽。 - Chloe
3警告:不适用于默认运行cloud-init的Ubuntu 18+,该程序在启动时控制主机名。 - null

这是安全的操作,你只需要确保同时编辑系统主机名配置文件(/etc/hostname)和主机名解析文件(/etc/hosts)。 在终端执行以下命令:
sudo -s
editor /etc/hostname
editor /etc/hosts
shutdown -ry now

3您可以使用sudo service hostname restart来避免关闭。 - Wtower
3@Wtower在14.04上无法工作。:( - ankush981
警告:不适用于默认运行cloud-init的Ubuntu 18+,该程序在启动时控制主机名。 - null

除了编辑/etc/hosts和/etc/hostname之外,各种服务可能也会受到更改的影响。在Ubuntu中,默认安装了Mysql和postfix。破损的postfix不会影响大多数Ubuntu用户,因为它是一个后台电子邮件服务器,使用较少。
sudo editor /etc/postfix/main.cf
sudo service postfix restart

默认的mysql配置不使用主机名,所以它会正常工作。如果您进行了自定义配置,请编辑/etc/mysql/目录下的文件并重新启动服务。
您可能还想编辑/etc/motd(每日消息),该消息会显示在虚拟终端和远程登录中。不过这个操作不会对任何东西造成损害。
其他可能需要修复的服务包括apache、bind9等。对于每个服务,找到并编辑其配置文件中的主机名,并重新启动服务。

另一种更好且安全的重命名主机名的方法

安装ailurus

  • 添加PPA并更新您的软件源

    sudo add-apt-repository ppa:ailurus && sudo apt-get update

  • 安装ailurus

    sudo apt-get install ailurus

  • 安装完成后,可以在应用程序>>系统工具>>Ailurus中找到它
    alt text


5为什么这个收到负面评价?最好使用专用工具来配置某些东西,而不是在命令行上瞎折腾,可能会导致一些问题。 - endolith
43安装如此庞大的软件只是为了更改主机名有点过头了。 - Nemo
11我同意这是过度杀伤力的,特别是因为软件不在存储库中可用,而必须从PPA安装... - Marcel Stimberg
@karthick87或许在你的回答中提到这是一款庞大的软件(还有其他配置选项)会更好。就个人而言,我同意endolith的观点,一个只有一个简单变化点的工具比许多命令行操作更好(我使用Ubuntu Tweak,目前也可以从PPA获取)。 - lofidevops
1我认为使用这个工具,你可以轻松地破坏更多的东西(而不仅仅是在几个文件中替换一个单词)。它向你暴露了太多的东西。 - gerlos

主机名是在本地网络上唯一标识您的计算机的名称(可能也是在互联网上),所以除非您知道自己在做什么,否则不建议更改它。
但是您可以更改命令提示符,使其不显示“.belkin”(域名部分)。
export PS1='\u@\h \w> '

请参阅bash man page,特别是有关提示的部分,以获取更多信息。

使用hostname命令来更改您的主机名。
sudo hostname newname

然而,这并不会编辑您的主机文件,您必须这样做以确保您的计算机能够识别自己。
gksudo /etc/hosts

并添加一个新的条目,将您的主机名指向127.0.0.1。
127.0.0.1 oldname newname

你可以把旧条目也删除掉,但我更喜欢保留它。

如果你不想使用文本编辑器玩耍,Ubuntu Tweak(从他们的网站上下载deb包)可以让你轻松处理这个小问题(还有很多其他小调整,你可能想要进行但又不想在终端和文件中操作)。

出于好奇,是否有什么特别的原因,为什么 Ubuntu Tweak 不在软件仓库中呢? - Olivier Lalonde
他们从来没有把它加进去/还没有被接受。你可以在开始调整之后,通过终端或仓库列表将他们的仓库添加到你的列表中。 - dkuntz2
你也可以通过以下命令将Ubuntu Tweak添加为PPA:sudo add-apt-repository ppa:tualatrix/ppa 然后执行 sudo apt-get updatesudo apt-get install ubuntu-tweak - lofidevops
1请注意,自Ubuntu Tweak 13.04版本起,不再提供此选项。 - lofidevops

以下命令可以即时更改主机名,但要使其永久生效,您需要编辑/etc/hostname文件:
echo 'new_hostname' > /proc/sys/kernel/hostname

打开一个新的终端会话,你会立即看到它。
有了systemd,正确的做法是这样的。
hostnamectl set-hostname "new_name"