欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

OS X 10.10.1 /etc/hosts & /private/etc/hosts 文件被忽略且无法解析 有大用

48

正如标题所说,运行 os x 10.10.1。如果我的主机文件中有一个条目并执行 adignslookup它仍然显示与我的主机文件中的 IP 不同的 IP,即使在尝试刷新各种缓存之后也是如此。

我试过以下..

  1. 通过运行刷新 mdns 和 udns 缓存:

    1. sudo discoveryutil mdnsflushcache;

    2. sudo discoveryutil udnsflushcaches;

  2. 使用刷新缓存dscacheutil -flushcache

  3. 重新加载discoveryd.plist文件

    1. sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist

    2. sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist

我的主机文件看起来像这样..

% cat /private/etc/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
fe80::1%lo0 localhost
166.78.60.102   admin.devsite1.com

9 个回答 正确答案


69

/private/etc/hosts 似乎在优胜美地(版本 10.10.1)中为我正常工作。不需要刷新缓存或重置discoveryd(优胜美地中的 DNS 解析器);sudo fs_usage | grep private/etc/hosts显示discoveryd在我保存更改后立即读取文件。

[更新:discoveryd仅在 OS X 版本 10.10.0 - 10.10.3 中使用。在早期和以后的版本中,都mDNSResponder提供了相同的功能......并且还立即注意到 /etc/hosts 中的变化。]

但是,dignslookuphost不会在其中看到条目,因为它们会绕过系统的解析器并进行原始 DNS 查找。他们一直这样做,所以这在优胜美地并不新鲜。在 OS X 中通过系统解析器进行查找的“官方”方法是使用dscacheutil

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

...但是由于这非常冗长,我倾向于只使用它ping(然后查看第一行,它列出了它正在 ping 的 IP)。从 10.9 开始,您还可以使用 Network Utility 的 Lookup 选项卡(在此之前它使用dig,因此绕过了系统查找策略)。

BTW,请不要关注Tetsujin链接的macrumors线程;到处都是不太清楚自己在做什么的人,他们误解了自己错误的结果。

  • 1
    谢谢戈登,是的,我在发布此内容后意识到dignslookup并且host不要使用本地 dns 解析。话虽这么说,但/etc/hosts按预期工作.. 
    – NDBoost
     2014 年 12 月 3 日 17:19
  • 如果我更新我的/etc/hosts文件或我的/private/etc/hosts文件,那么它根本不会反映dscacheutil -q host -a name www.example.com或任何其他命令.. 
    – 旅行
     2015 年 9 月 30 日 14:51
  • 4
    @Trip 确保您添加的条目格式正确:IP 地址后跟空格或制表符,后跟名称,然后是行尾的换行符。尝试打印主机文件cat -vet /etc/hosts以使通常不可见的字符可见。每行应该看起来像“127.0.0.1^Inetsecuritybureau.com$”(“^I”是一个制表符,“$”是换行符)或“127.0.0.1 netsecuritybureau.com$”。如果您在“$”之前看到“^M”(回车),则您有 DOS/Windows 格式的文本,您需要删除回车。  2015 年 9 月 30 日 16:24 
  • 啊哇非常感谢您的帮助。我按照您的指示确保它是一个选项卡或空格。我的行是 : M127.0.0.1^Iyoutube.com^M^M,然后我执行dscacheutil -flushcache; sudo killall -HUP mDNSResponder,当导航到 youtube.com 时,它仍然显示 youtube 而不是 localhost。 
    – 旅行
     2015 年 9 月 30 日 16:33
  • @Trip 有很多方法可以清理命令行中的不可见字符,但我会推荐 GUI 编辑器TextWrangler - 使用 View menu > Text Display > Show Invisibles 来查看(和编辑)类似的东西回车。此外,它是免费的,并且具有显示/打开不可见文件和文件夹(如 /etc)的选项,以及使用管理员权限编辑系统文件的选项。  2015 年 10 月 1 日 23:46
21

我发现了这个问题的另一个问题。

为了解决我遇到的问题,我不得不添加 IPv6 样式的主机文件条目。

如果您有 IPv6 网络配置设置,Safari 似乎会忽略 IPv4 条目。

您必须在 /etc/hosts 中添加解析为 IPv6 本地主机地址的重复条目。

IPv4 条目 127.68.56.101 facebook.com

例如 IPv6 条目 fe80::1%lo0     facebook.com

等等。

1

在文本编辑中编辑后,我的主机文件一直被忽略。我尝试了几种方法来修复行尾,将 IPv6 条目添加到现有的 IPv4 条目中,但按照上面的 JB Smiths 回答没有成功。我怀疑如果我的公司支持我在尝试后发现的 IPv6,他的回答会起作用。

唯一对我有用的解决方案是使用这个免费的 GUI 插件来编辑主机文件。

https://github.com/specialunderwear/Hosts.prefpane/blob/master/README.mdown

1

我找到这篇文章是因为 Yosemite 10.10.5 没有接收到我的 hosts 文件更改,我无能为力地修复它。(我重新启动,尝试刷新缓存,遵循我在互联网上可以找到的所有建议等)。

答案很简单,实际上很尴尬,但我想我会分享。我使用 textedit 编辑主机文件,它冒昧地将文件保存为 hosts.txt。通常我会注意到这样的事情,但我正在使用全新安装的 Yosemite 并且尚未打开“显示所有文件扩展名”,因此当我在桌面上查看文件名时,它看起来并没有改变。

所以这很明显,大多数阅读这篇文章的人可能已经这样做了,但请务必检查您的 hosts 文件是否确实存在并且没有被 hosts.txt 替换

要打开显示文件扩展名,请转到Finder > 首选项 > 显示所有文件扩展名

要阻止 TextEdit 向文件添加 .txt 扩展名,请在 Text edit 中打开一个文件,然后选择File > Save As(如果您没有看到Save As菜单项,请在单击File后按住选项键,并且Save As应该出现在菜单中)。查找选项如果未提供扩展名,请使用“.txt”并取消选择它。

0

我相信 Apple 会将此视为一个错误(我今天提交了一个)。我确实注意到其中的新条目/etc/hosts被拾取,但是对现有条目的更改被忽略了。所以.... 更改条目的主机名(例如 web1 到 web1a)为我提供了一种解决方法。

旧 /etc/hosts 条目:54.173.164.18  web1

新的 /etc/hosts 条目:54.174.161.12 web1a

0

就我而言,我会设置一个 .ssh/config

#Host *.ourdemo.ca
  User jumpy
  ProxyCommand ssh ourjumpbox.ca -W %h:%p
  • 您介意解释一下配置文件的作用以及它与问题的关系吗?  2016 年 4 月 21 日 20:47
  • 1
    问题是为什么本地 /etc/hosts 文件中的条目被忽略。就我而言,它被忽略了,因为我已指示通过代理盒 (ourjumpbox.ca) 将所有流量传输到一组机器 (*.ourdemo.ca)。SSH 顺从地代理了连接,因此它最终成为用于解析地址的代理的 /etc/hosts 文件,而不是我的本地 /etc/hosts 文件。  2016 年 5 月 22 日 0:31 
0

我有一个非常相似的问题,我通过邮件收到两行要添加到我的/etc/hosts

该域包含一个-类似my-domain.com

问题原来是发件人的电子邮件客户端——不管怎么说,MS Outlook——将微软非常喜欢-的长字符中的 ascii 转换为使用其嵌入式自动更正替换为他们的.---

主机文件看起来确实很完美,很难找到这个问题。当我删除行并手动将其写回时,它们开始工作。

很难理解这一点,以至于我深入探讨了为什么 MacOS 客户端应该忽略主机文件并直接跳到名称解析。

0

刚遇到这个问题。这是由于从 hipchat 复制/粘贴而不是写地址引起的。

复制过程添加了一些坏字符而不是空格并导致了问题。

重写行解决了这个问题。

0

我使用应用程序 SelfControl(实际上是在 macOS mojave 10.14.4 上)已经有一段时间了,并想检查 SelfControl 是如何输入的……它们看起来像这样:

0.0.0.0 xyz.com
:: xyz.com
0.0.0.0 www.xyz.com
:: www.xyz.com

基于此,我将所有内容都更改为我的本地主机,所以

127.0.0.1
::1

作品。

  • 我完全不确定这如何回答这个问题。这似乎只是一些随机观察,与问题无关。 
    – 铁人
     2019 年 5 月 9 日 11:34
  • 1
    您能否添加一些详细信息,说明您究竟在哪里更改了什么内容,以及它与问题的关系? 
    – 无山坡
     2019 年 5 月 9 日 11:54
  • 问题是为什么自 10.10.1 以来主机文件被忽略......我处于同样的情况,即手动输入被忽略但通过应用程序 SelfControl 进行的输入按预期工作。我之前的条目缺少的是第二部分,带有“www.”的域。无法弄清楚我的条目还有什么问题,因为在 10.10.1 之前一切正常。  2019 年 5 月 16 日 10:42

您必须登录才能回答此问题。


来自  https://apple.stackexchange.com/questions/158117/os-x-10-10-1-etc-hosts-private-etc-hosts-file-is-being-ignored-and-not-resol


普通分类: