DNS
Mac 上修改 /etc/hosts 不生效
/etc/hosts 文件只在这台 Mac 上把名称映射到 IP 地址。mDNSResponder 会读取它,但有些 App 和设置会绕过它。
症状
- 在
/etc/hosts中添加了一行,但浏览器仍然打开旧网站。 - 条目在“终端”中有效,但在某个 App 中无效。
example.com有效,但www.example.com无效。
可能的原因
- 行格式错误。每行必须以 IP 地址开头,后面是主机名。
#表示注释的开始。 - 缺少名称。该文件只映射完全相同的名称。需要的每个名称都要添加,例如既要添加
www.example.com,也要添加example.com。 - 缓存的应答。macOS 或浏览器可能会在一段时间内保留旧地址。
- 代理或 App 自己的 DNS。使用代理时,由代理服务器查询名称。有些 App 也有自己的 DNS 设置。
如何检查
显示该文件。
cat /etc/hosts向 macOS 解析器查询该名称。结果必须是文件中的地址。
dscacheutil -q host -a name example.com显示系统代理设置。代理会自行查询名称。
scutil --proxy
如何修复
以管理员身份在文本编辑器中打开该文件。
sudo nano /etc/hosts需要管理员密码。
为每个名称添加一行:先写 IP 地址,再写一个或多个名称。
127.0.0.1 example.com www.example.com保存文件。在 nano 中,依次按 Control-O、Return 和 Control-X。
清除 DNS 缓存。请参阅在 Mac 上刷新 DNS 缓存。
sudo killall -HUP mDNSResponder需要管理员密码。
退出并重新打开浏览器。
如果 App 使用代理,在不用代理的情况下测试,或者在代理服务器上添加该条目。
常见问题
需要重启 Mac 吗?
不需要。保存文件,清除 DNS 缓存,然后重新打开 App。
可以使用 *.example.com 这样的通配符吗?
不可以。hosts 文件的格式包括地址、正式主机名和别名。每个名称都要写在这一行上。
参考资料
- hosts(5),macOS 27.2 自带的 man 手册页
- mDNSResponder(8),macOS 27.2 自带的 man 手册页
- Apple 支持(已归档):在 OS X 中重设 DNS 缓存
- scutil(8),macOS 27.2 自带的 man 手册页
参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。