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

dig

直接向 DNS 服务器查询记录,验证解析结果、权威服务器和委派链。

补充说明

dig 是 macOS 自带的 BIND 查询工具,输出包含状态码、标志位、ANSWER/AUTHORITY/ADDITIONAL 段和 TTL,适合排 DNS。常用 +short 取精简结果,@服务器 指定解析器,-x 做反向查询,+trace 从根开始跟踪委派。macOS 上它位于 /usr/bin/dig,版本通常比 Homebrew 的 bind 旧。

关键差异:macOS 的系统解析由 mDNSResponder 负责,会读取 /etc/hosts、VPN 的 scoped resolver 和 .local 的 mDNS;dig 不走这套逻辑,而是直接读 /etc/resolv.conf 并向其中列出的服务器发查询。因此在 VPN 分流、内网域名或本地 hosts 场景里,dig 的结果可能和浏览器不一致,这时要看 scutil --dns 或 dscacheutil -q host。

dig 默认不应用 search domain,除非加 +search;要查绝对域名可以在末尾加点,例如 example.com.。脚本判断记录是否存在不能只看退出码,dig 对 NXDOMAIN 仍返回 0,必须检查输出里的 status:。

常用示例

# 完整查询 A 记录和 TTL
% dig example.com

# 只要结果,适合脚本
% dig +short example.com

# 查 AAAA 和 MX
% dig +short example.com AAAA
% dig example.com MX +noall +answer

# 指定公共 DNS,绕过本机配置
% dig @8.8.8.8 example.com A

# 反向解析 IP
% dig -x 8.8.8.8 +short

# 从根服务器跟踪委派链,诊断权威 DNS 问题
% dig +trace example.com

# 强制 TCP 并请求 DNSSEC 记录
% dig +tcp +dnssec example.com

# 查看 macOS 实际使用的解析器和搜索域
% scutil --dns | head -30

易错点与排错

相关命令

参考链接

读完自测

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

  1. 为什么 dig 能查到域名,浏览器却打不开?
  2. +short 没有输出就一定是域名不存在吗?
  3. 在 VPN 环境下,怎样确认 macOS 实际使用的 DNS 服务器?
答案
  1. dig 只验证 DNS 查询,不读 hosts、不走系统 scoped resolver,也不处理代理/TLS;浏览器失败可能是解析路径不同或后续连接问题,用 scutil --dns 和 curl -v 分层确认。
  2. 不一定,NXDOMAIN、SERVFAIL、超时都可能没有简短输出;去掉 +short 看 status: 和 flags 才能判断。
  3. 用 scutil --dns 查看 resolver 顺序和 nameserver,再用 dig @该服务器 复现系统查询。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令