如何使用 discoveryutil 在 OS X Yosemite 中刷新 DNS 缓存

刷新 OS X 中的 DNS 缓存

有些 Mac 用户可能会遇到这样的情况,他们需要刷新 OS X 中的 DNS 缓存,以便名称服务器正确解析,或者让他们的个人计算机注意到某些 DNS 地址更改。这与系统管理员、网络管理员和 Web 开发人员尤其相关,但在某些情况下,其他用户也可能需要转储和重置 DNS 缓存,例如用户拥有 修改了 /etc/hosts 文件,他们需要更改在不重启 Mac 的情况下生效。

长期使用 Mac 的用户会知道重置 DNS 缓存已在 中更改Mac OS X 的几乎每个版本,OS X Yosemite 也不例外,可能是由于发现替换了 mDNSResponder,然后再次切换回 mDNSResponder。无论如何,在 Yosemite 中刷新 DNS 缓存仍然是一个终端命令,但它会根据您使用的操作系统的确切版本而略有不同,它实际上允许您清除多播 DNS 或单播 DNS,或同时清除两者。如果您尝试重置 Mac 上的所有 DNS 缓存,您可能需要清除这两个缓存。

在 OS X Yosemite 10.10.4 和 OS X 10.10.5 中清除 DNS 缓存

从 OS X 10.10.4 到 10.10.5(包括 10.11),Apple 放弃了 discoveryd 并替换了它(或者更确切地说,恢复为)mDNSResponder。因此,要清除 OS X Yosemite 10.10.4 和 10.11 El Capitan 中的 DNS 缓存,并且可能是更高版本,命令字符串如下:

sudo dscacheutil -flushcachesudo killall -HUP mDNSRespondersay cache flushed

该命令会刷新 OS X 10.10.4+ 的所有 DNS 缓存。

长期使用 Mac 的用户可能还记得,在 Yosemite 之前的版本中,命令字符串基本上是有效的。话虽如此,10.10.4 之前的早期版本的 OS X Yosemite 将使用下面讨论的不同命令字符串。

在 OS X Yosemite (10.10, 10.10.1, 10.10.2, 10.10.3) 中清除 DNS 缓存

您需要使用终端来重置缓存,您可以在 /Applications/Utilities/ 中找到终端应用程序或使用 Spotlight 启动它。要在最新版本的 OS X 中完全清除所有 DNS 缓存,请使用两个不同的命令同时针对 MDNS(多播 DNS)和 UDNS(单播 DNS)。

清除 MDNS 缓存

sudo discoveryutil mdnsflushcache

按回车键并在要求时输入管理员密码。

清除 UDNS 缓存

sudo discoveryutil udnsflushcaches

再次,按回车键并在要求时输入管理员密码。请注意,后一个命令的缓存是复数形式,这是一个微妙但重要的语法差异。

刷新并重置 OS X Yosemite 中的所有 DNS 缓存

如果你愿意,你也可以将上面的两个命令串在一起,下面甚至会在缓存被清除时口头通知:

sudo discoveryutil mdnsflushcachesudo discoveryutil udnsflushcachessay flushed

事实上,MDNS 和 UDNS 缓存是不同的,但我发现要在 OS X Yosemite 中实际清除功能性 DNS 缓存,这两个命令都是必需的。完全有可能您只需要根据自己的需要清除一个或另一个。

对于那些想知道的人,OS X Yosemite 已经取消了 mDNSResponder,所以没有必要终止 mDNSResponder 进程到 像以前版本的 Mac OS X 一样刷新 DNS 缓存

在 OS X Yosemite 中检查 DNS 缓存详细信息

如果您正在更改或将要更改 DNS,并且想查看有关当前缓存内容的一些详细信息,可以使用以下命令:

获取 UDNS 缓存统计信息:

sudo discoveryutil udnscachestats

您还可以使用以下方法检索有关多播 DNS 缓存的详细信息:

sudo discoveryutil mdnscachestats

这两者都将提供有关缓存的 DNS 条目数量的详细信息,并提供如下所示的报告:

UDNS 缓存统计:缓存 962 of 1750

如果您在运行 flushcache 变体之前和之后运行这些命令,您会发现它们应该被重置为 0 条目缓存,如下所示:

MDNS 缓存统计:lo0:缓存 0 of 2000

你怎么知道它是否改变了?

刷新缓存后,如果您想确定名称服务器或 IP 是否实际更改,您可以使用带有 URL 的“dig”命令,如下所示:

挖 osxdaily.com

dig 类似于 nslookup,除了它有更好的输出和更多细节,包括查询时间、用于访问域的设置 DNS 服务器和时间戳,所有这些在排除名称服务器故障时都很有价值问题。顺便说一下,如果查询时间缓慢,您应该使用像 namebench 这样的工具来查找为您提供更快的 DNS 服务器,通常是 Google DNS 或 OpenDNS。

知道最新版本的 OS X 的另一个 DNS 缓存技巧吗?请在评论中告诉我们。