Mac OSX 更改 /etc/hosts 即使在杀死 mDNSResolver 后也没有效果
Mac OSX changing /etc/hosts has no effect even after killing mDNSResolver
我在 Windows (10) 中没有遇到过类似的问题,而且我在文档中搜索的任何内容似乎都没有说明为什么,如果这不起作用,那就是这种情况
- 我打开终端并编辑 /etc/hosts(我在 PC 上做过很多次,几年前也在 OSX 上做过)
- 只是为了咧嘴一笑,如果这不起作用,我输入
sudo killall -HUP mDNSResponder
- 然后为了更多的笑容我重启
这完全没有效果。谁能指出我为什么?谢谢。
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 工具 dig
、host
和 nslookup
,因为它们都直接测试 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
以下步骤对我有用
- 刷新 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
添加你想在主机文件中添加的条目 ipxxx.xx.xx.com
将这两行移到最后
255.255.255.255 广播主机
::1 本地主机 Administrators-MacBook-Pro.local
再次执行第 1 步
我在 Windows (10) 中没有遇到过类似的问题,而且我在文档中搜索的任何内容似乎都没有说明为什么,如果这不起作用,那就是这种情况
- 我打开终端并编辑 /etc/hosts(我在 PC 上做过很多次,几年前也在 OSX 上做过)
- 只是为了咧嘴一笑,如果这不起作用,我输入
sudo killall -HUP mDNSResponder
- 然后为了更多的笑容我重启
这完全没有效果。谁能指出我为什么?谢谢。
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 工具
dig
、host
和nslookup
,因为它们都直接测试 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
以下步骤对我有用
- 刷新 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
添加你想在主机文件中添加的条目 ipxxx.xx.xx.com
将这两行移到最后 255.255.255.255 广播主机 ::1 本地主机 Administrators-MacBook-Pro.local
再次执行第 1 步