系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

dscacheutil

查询和清空 macOS 目录服务缓存,配合 mDNSResponder 刷新 DNS。

补充说明

dscacheutil 操作的是 DirectoryService 缓存,覆盖用户、组、主机、服务等条目。常用两类操作:-q 类别 -a 键 值 按系统视角查询,例如 -q host -a name example.com、-q user -a name root;-flushcache 清空缓存。它查询时会经过 mDNSResponder,因此能看到 /etc/hosts、Bonjour 和 VPN scoped resolver 的结果,这一点和直接问 DNS 服务器的 dig 不同。

版本差异要分清:Mac OS X 10.6 起 dscacheutil 取代了旧的 lookupd,老教程里的 lookupd -flushcache 已不适用。macOS 10.15 以后 DNS 缓存主要由 mDNSResponder 持有,只跑 dscacheutil -flushcache 往往清不干净,通行做法是两条一起执行:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。-HUP 让 mDNSResponder 重读配置并清缓存,不是杀死进程;不要用 kill -9。

清缓存只能解决“本机缓存了旧记录”,不能解决权威 DNS 配错、VPN 分流错误或应用自己的缓存。浏览器、Java、Go 等运行时可能各自缓存 DNS,刷新系统缓存后仍需重启应用或清应用内缓存。-flushcache 成功时没有输出,不要因为“没打印成功”而重复执行。

常用示例

# 按系统解析视角查主机,能看到 hosts 和 DNS 的综合结果
% dscacheutil -q host -a name example.com

# 查 Bonjour/mDNS 主机名
% dscacheutil -q host -a name printer.local

# 查本地用户记录
% dscacheutil -q user -a name root

# 查组记录
% dscacheutil -q group -a name staff

# 查看目录服务缓存配置和搜索策略
% dscacheutil -configuration

# 查看缓存统计
% dscacheutil -statistics

# 刷新目录服务缓存,并让 mDNSResponder 重读配置
% sudo dscacheutil -flushcache
% sudo killall -HUP mDNSResponder

# 验证刷新后系统看到的新记录
% dscacheutil -q host -a name example.com

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么刷新 DNS 通常要同时执行 dscacheutil 和 killall -HUP?
  2. dscacheutil -q host 和 dig 的结果为什么会不一样?
  3. killall -HUP mDNSResponder 会不会中断 DNS 服务?
答案
  1. dscacheutil 清目录服务缓存,mDNSResponder 持有 DNS 缓存;两层都清才能让新记录稳定生效。
  2. dscacheutil 走系统解析路径,会读 hosts、mDNS 和 VPN scoped resolver;dig 直接问 resolv.conf 中的 DNS 服务器。
  3. 不会,HUP 让进程重读配置并清缓存,进程本身继续运行;不要用 kill -9。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令