之前『Windows 修改 Hosts』介绍了如何在 Windows 平台修改 Hosts,今天来聊聊如何在 macOS 平台修改 Hosts。

首先依然是找到 Hosts,macOS 系统的 Hosts 文件路径为 Macintosh HD/private/etc/hosts

Hosts File

由于系统文件管理器『Finder』并不会像 Windows 一样方便地从『此电脑』进入,所以我们其实还能通过『Finder』菜单「前往文件夹」功能直接进入。

Finder Menu

在「前往文件夹」中输入 /etc/hosts 并点击「前往」即可直达。

前往文件夹

找到 Hosts 后依然可以通过任何文本编辑器对其进行修改,但需要注意,etc 文件夹的默认权限为「只读」:

etc 文件夹权限

当你尝试修改 Hosts 文件时,系统会弹出如下提示:

无法直接编辑 Hosts 文件

我们可以将 Hosts 文件复制到桌面进行修改,修改完成后再复制到原目录下覆盖即可,覆盖时会要求输入密码或触控 ID,都是为了防止用户误操作。

使用密码或触控 ID 覆盖 Hosts 文件

既然是 etc 文件夹权限原因,我们还可以通过修改该文件夹的权限来直接编辑 Hosts 文件。

修改 etc 文件夹权限

etc 文件夹中「everyone」的权限设置为「读与写」便可直接编辑 Hosts 文件,编辑完成后记得要将该权限改回来。

既然都用上 Mac 了,那就再介绍一个比较 Geek 的修改方式,用命令来修改。

打开『Terminal』,输入命令:

➜   sudo vi /etc/hosts

其中 sudo 表示以系统管理者的身份执行指令,由于默认情况下用户对 etc 目录的权限为「只读」,而「系统」的权限为「读与写」,所以通过该命令可以得到写权限,vi 则表示要编辑,后面就是 Hosts 文件路径。

执行该命令后,会要求输入本机密码,输入完成并回车就可以直接在『Terminal』中对 Hosts 文件进行编辑。

编辑需要用到 vi 命令,也不是很复杂,通过方向键移动光标,键入 i 代表插入(INSERT),随即进入编辑模式,编辑完成后,点击 Esc 退出编辑,再键入 :wq 并回车执行保存退出,Hosts 文件即修改完成。

除了 vi,我们也可以用 nano 来修改,同样在『Terminal』中输入命令:

➜   sudo nano /etc/hosts

执行完后同样要求输入密码进入编辑模式,同时『Terminal』底部还会展示快捷键介绍,似乎比 vi 要方便一些。

使用 nano 编辑

进入后不再需要其他命令,可直接编辑模式,编辑完成后点击 Control + O 保存,提示「File Name to Write: /etc/hosts」,回车确认,再按 Control + X 退出。

当你有大量的 Hosts 内容需要添加时,用上面这两个命令似乎并不是怎么方便,而修改文件夹权限或者文件副本却又一点都不 Geek,那可以考虑另一种方式。

先将需要追加的 Hosts 内容写到一个文件中,比如「hosts.txt」,然后执行命令:

➜   sudo -s
➜   cat ~/hosts.txt>>/etc/hosts

cat 命令用于在末尾追加,>> 前面的是我们需要追加的 Hosts 内容文件路径,比如我这里就放在当前用户目录中,>> 后面的是源 Hosts 文件的路径,这样就能够将 Hosts 从一个文本文件中追加到系统 Hosts 文件中。

以上就是 macOS 修改 Hosts 的五种方法,同 Windows 一样,修改了 Hosts 文件后也有可能会出现不立马生效的情况,同样是需要刷新 DNS 缓存:

➜   sudo killall -HUP mDNSResponder

与 Windows 平台的命令是不一样的,由于使用了 sudo 所以同样要输入本机密码。

最后附上 macOS 平台下原始的 Hosts 文件内容:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost

基本与 Windows 平台下一致,只不过将几个 localhost 取消了注释罢了,如果怀疑你的 Hosts 文件被病毒或木马修改,可复制以上内容修复 Hosts 文件。