Mac OSX 更改 /etc/hosts 即使在杀死 mDNSResolver 后也没有效果

Mac OSX changing /etc/hosts has no effect even after killing mDNSResolver

我在 Windows (10) 中没有遇到过类似的问题,而且我在文档中搜索的任何内容似乎都没有说明为什么,如果这不起作用,那就是这种情况

这完全没有效果。谁能指出我为什么?谢谢。


UPDATE: 令人尴尬的是,我在/etc/hosts中输入的行是相反的,即域优先,如:

mydomain.com  192.168.33.10    #wrong
192.168.33.10    mydomain.com  #what it should have been

但是,接受的答案写得很好,值得赞赏。

我看到在 macOS (/OS X) 上使用 /etc/hosts 的两个常见问题:

  • 格式不正确:/etc/hosts 文件中的每个条目都必须是 IP 地址后跟 space 或制表符,后跟名称,最后是换行符的线。尝试使用 cat -vet /etc/hosts 打印主机文件,使通常不可见的字符可见。每行应如下所示:

    127.0.0.1^Iwww.example.com$
    127.0.0.1 www.example.com$
    

    ("^I" 是制表符,"$" 是行尾的换行符。) 如果条目列出多个名称也可以(也由 space 分隔) s 或制表符)。

    如果您在“$”之前看到一个“^M”(回车 return),则说明您的文本是 DOS/Windows 格式的,您需要删除回车 return( s).

  • 不正确的测试:不要使用 command-line 工具 dighostnslookup,因为它们都直接测试 DNS,并且因此绕过 /etc/hosts 文件。浏览器有时会缓存一些东西,这会产生误导性的结果。 "right" 测试系统名称解析系统的方法是使用 dscacheutil 命令:

    dscacheutil -q host -a name www.example.com
    

    ...但是由于冗长烦人,我倾向于只使用 ping,看看它说要测试的地址。

我遇到这个线程试图在 macOS Catalina 上解决同样的问题但没有成功。这是因为 macOS Catalina 还有另一件事要做;如果您以 root 用户身份更改它们,它只会使主机文件中的更改生效(这不是使用 sudo 命令完成的)!!

默认情况下,您的系统上没有 root 用户,因此这里有一个 link 以及一个分步指南: https://support.apple.com/en-us/HT204012

然后我能够:

su
nano /etc/hosts

了解更多信息: https://discussions.apple.com/thread/250805304

以下步骤对我有用

  1. 刷新 DNS sudo killall -HUP mDNSResponder(或在 activity 监视器中终止 DNS 并让它重新加载)

2.Changing read-write /etc/host 文件的权限应该是 -rw-r--r-- 。使用命令 $ sudo chmod g+r /etc/host s 和 $ sudo chmod o+r /etc/hosts

  1. 添加你想在主机文件中添加的条目 ipxxx.xx.xx.com

  2. 将这两行移到最后 255.255.255.255 广播主机 ::1 本地主机 Administrators-MacBook-Pro.local

  3. 再次执行第 1 步