---
title: "Mac 上 /etc/hosts 不生效：如何编辑并让它生效 · Kilobat 指南"
url: "https://kilobat.app/zh-hans/guides/hosts-file-not-working.html"
description: "/etc/hosts 中的条目在 Mac 上没有效果。检查文件格式，清除 DNS 缓存，找出绕过 hosts 文件的因素。"
---

DNS

# Mac 上修改 /etc/hosts 不生效

`/etc/hosts` 文件只在这台 Mac 上把名称映射到 IP 地址。mDNSResponder 会读取它，但有些 App 和设置会绕过它。

适用于：所有当前 macOS 版本。 · 核查日期：2026年10月29日

## 症状

- 在 `/etc/hosts` 中添加了一行，但浏览器仍然打开旧网站。
- 条目在“终端”中有效，但在某个 App 中无效。
- `example.com` 有效，但 `www.example.com` 无效。

## 可能的原因

- **行格式错误。**每行必须以 IP 地址开头，后面是主机名。`#` 表示注释的开始。
- **缺少名称。**该文件只映射完全相同的名称。需要的每个名称都要添加，例如既要添加 `www.example.com`，也要添加 `example.com`。
- **缓存的应答。**macOS 或浏览器可能会在一段时间内保留旧地址。
- **代理或 App 自己的 DNS。**使用代理时，由代理服务器查询名称。有些 App 也有自己的 DNS 设置。

## 如何检查

1. 显示该文件。

   ```
   cat /etc/hosts
   ```
2. 向 macOS 解析器查询该名称。结果必须是文件中的地址。

   ```
   dscacheutil -q host -a name example.com
   ```
3. 显示系统代理设置。代理会自行查询名称。

   ```
   scutil --proxy
   ```

## 如何修复

1. 以管理员身份在文本编辑器中打开该文件。

   ```
   sudo nano /etc/hosts
   ```

   需要管理员密码。
2. 为每个名称添加一行：先写 IP 地址，再写一个或多个名称。

   ```
   127.0.0.1   example.com www.example.com
   ```
3. 保存文件。在 nano 中，依次按 Control-O、Return 和 Control-X。
4. 清除 DNS 缓存。请参阅[在 Mac 上刷新 DNS 缓存](https://kilobat.app/zh-hans/guides/flush-dns-cache-mac.html)。

   ```
   sudo killall -HUP mDNSResponder
   ```

   需要管理员密码。
5. 退出并重新打开浏览器。
6. 如果 App 使用代理，在不用代理的情况下测试，或者在代理服务器上添加该条目。

## 常见问题

**需要重启 Mac 吗？**

不需要。保存文件，清除 DNS 缓存，然后重新打开 App。

**可以使用 *.example.com 这样的通配符吗？**

不可以。hosts 文件的格式包括地址、正式主机名和别名。每个名称都要写在这一行上。

## 参考资料

- hosts(5)，macOS 27.2 自带的 man 手册页
- mDNSResponder(8)，macOS 27.2 自带的 man 手册页
- [Apple 支持（已归档）：在 OS X 中重设 DNS 缓存](https://support.apple.com/en-us/101481)
- scutil(8)，macOS 27.2 自带的 man 手册页

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本；在“终端”中用 `man <name>` 打开。

## 相关指南

- [在 Mac 上刷新 DNS 缓存](https://kilobat.app/zh-hans/guides/flush-dns-cache-mac.html): macOS 会把 DNS 回答保留一段时间。
- [Mac 上 DNS 无法解析](https://kilobat.app/zh-hans/guides/dns-server-not-found.html): DNS 出故障时，Mac 无法把 apple.com 这样的名称转换成 IP 地址。
- [Mac 上代理设置导致 App 无法连接](https://kilobat.app/zh-hans/guides/proxy-settings-breaking-apps.html): 代理设置会让流量经由另一台服务器转发。
- [Mac 上端口已被占用](https://kilobat.app/zh-hans/guides/port-already-in-use.html): 一个 TCP 端口和地址只能由一个进程监听。
