修改了/etc/hosts文件后,需要重新启动哪个服务?

修改了/etc/hosts文件后,需要重新启动哪个服务才能使更改生效?

17对于通过随机网络搜索回到这里的任何人...显然,如果你是在SSH客户端上运行类似命令,请不要运行sudo ifconfig eth0 down - OskyEdz
1@OskyEdzSnakehult,除非你在tmux/screen等中同时运行两个命令,并用&&分隔它们,这样即使你暂时断开连接,命令也能完成。 - Walf
9个回答

你不需要重新启动任何服务。
在测试14.04服务器安装时,更改会立即反映出来。
我认为唯一可能相关的服务是“networking”,但无需重新启动它。

为什么这些不需要重新启动? - Nathan Basanese
1顺便提一下,这也适用于Mac OS X(10.12.4(16E195))。 - Nathan Basanese
我没有必要重新启动任何服务,但是必须重新启动我的计算机才能使它工作。 - Gayan Weerakutti
2重新启动在技术上是重新启动“每一个”服务。而且它不应该是必要的...尽管需要注意的是,一些应用程序(例如,火狐浏览器)可能会缓存这些数据,因此需要重新启动“应用程序”。 - michael
6不行!它不适用于Ubuntu 16.04.4 LTS - Green
2不适用于更新的Linux系统。 - ChikuMiku

你可以尝试:(免责声明:如果您通过SSH连接,请勿运行)
sudo ifconfig eth0 down
sudo ifconfig eth0 up

(用你的网络卡替换eth0
但是从理论上讲,Arronical是正确的:你不需要它。

7这是我在任何网络更改之后倾向于做的事情,通常我会在两个命令之间加上&&,使其成为一行命令。 - Arronical
27除非,呃..你远程SSH到了这台机器? - Bruce
4如果通过远程SSH连接,那么重新启动可能与手动停止/启动网络一样(不)安全(因为当然,在关闭网络后,您将断开连接并无法重新打开它 - 甚至重新启动!)。但是,要执行ifconfig down + up,可以使用类似gnu screen(或tmux)的工具,并通过ifconfig up && ifconfig down同时运行两个命令,或者将它们放入一个两行的shell脚本中并运行。然后在此之后重新连接到您的gnu screen/tmux会话 - 如果一切顺利的话。 - michael

如果您使用的是默认设置的dnsmasq,请按照以下步骤操作:
$ pkill -HUP dnsmasq

谢谢。这是唯一一个对我有效的方法。Ping测试成功了,但是没有一个浏览器能够访问该网站。 - makkasi
2或者对于systemd系统,使用systemctl restart dnsmasq.service命令。 - Mr. White
当dnsmasq接收到SIGHUP信号时,它会清除缓存然后重新加载/etc/hosts文件。 - Gustav

理论上,对/etc/hosts文件的更改会立即生效。
但是,如果在此之后仍然得到旧的主机名
$ hostname

然后,要么重新启动电脑,要么重新启动网络连接...这样应该能显示正确的主机名。

大部分情况下,etc/hosts的更改应该会立即被识别。如果您添加了一个新条目,然后在托管etc/hosts文件的机器上通过名称ping它,很可能会有响应,这意味着DNS已经识别了etc/hosts的更新。在pihole系统上,如果您重新启动DNS解析器,它将获取到新添加/编辑的etc/hosts条目。最有可能的是,这取决于试图使用hosts条目的程序,它是否读取了当前的内容,还是只在启动时读取,或者像pihole一样,通过重新启动一个简单的内部功能来重新读取?

实际上,我注意到后缀可能需要重新启动,以便在其本地主机文件版本中包含新的主机,该文件位于此位置:/var/spool/postfix/etc/(ubuntu 16.04)。

你需要重新启动systemd-hostnamed服务,这是一个系统服务,可以用于从用户程序更改系统的主机名和相关的机器元数据。
/bin/systemctl restart systemd-hostnamed

你可能不需要重新启动任何东西,除非有一个临时的DNS缓存。要在Debian和Ubuntu上重新启动网络并清除DNS缓存:
sudo /etc/init.d/networking restart

我一直遇到一个错误,然后谷歌把我带到了这个问题。我以为我需要重新启动某个服务,但实际上我发现是我的错。
$ ping remote_hostname
ping: unknown host remote_hostname

主机无法识别新条目的原因是IP地址中有一个拼写错误。
##.2480.##.##    remote_hostname

或者,嗯,当然我自己绝对不会这样做,只是说一下,如果你先放主机名再放IP地址,你也可能会出现在这个页面上。 - joseph_morris