host命令仅执行dns查询,不读取本地网卡配置或/etc/hosts文件,用于正向解析(域名→ip)和反向解析(ip→域名),需指定正确参数顺序与大小写,如host -t mx example.com,且默认绕过本地hosts文件。

host 命令不能查本机 IP,它只查 DNS 记录 —— 想看自己机器的 IP 地址,请用 ip 或 hostname -I,别混用。
host 命令查的是远端域名或 IP 的 DNS 解析结果
它不读取本地网卡配置,也不访问 /etc/hosts(除非系统配置强制优先查 hosts,但 host 默认绕过)。它的作用很窄:发 DNS 查询包,等响应,打印结果。比如你输入 host google.com,实际是向当前 DNS 服务器(通常是 /etc/resolv.conf 里第一个)发一个 A 记录查询请求。
- 查域名 → 得到 IP(正向解析),可能附带 CNAME
- 查 IP(如
host 8.8.8.8)→ 得到 PTR 记录(反向解析),格式是X.X.X.X.in-addr.arpapointer 域名 - 查不到时直接报
Host not found或connection timed out,不会 fallback 到本地文件
常用参数组合和典型错误
多数人卡在参数顺序或类型拼写上。记住:-t 后必须紧跟记录类型,且大小写敏感;server 参数必须放在最后。
-
host -t MX example.com✅ 正确:查邮件服务器 -
host example.com -t MX❌ 错误:-t被忽略,只做默认 A 查询 -
host -t mx example.com❌ 多数版本报错:mx不被识别,必须大写MX -
host @1.1.1.1 google.com✅ 指定 DNS 服务器(注意@符号位置) -
host -W 2 google.com✅ 设置超时为 2 秒,避免卡住
想查自己公网 IP?host 可以但有局限
用 host myip.opendns.com resolver1.opendns.com 确实能返回你的出口 IP,原理是 OpenDNS 的这个域名会响应客户端真实源 IP。但它依赖第三方服务可用性,且不保证 IPv6 支持。
- 如果
resolver1.opendns.com不可达,命令失败,不会自动换 DNS - 返回结果是纯文本,比如
myip.opendns.com has address 203.205.128.1,需用awk '{print $4}'提取 - 对比
curl ifconfig.me,host方式更轻量、无 HTTPS 开销,但容错更低
和 dig / nslookup 的关键区别在哪
host 输出固定、无多余字段,适合脚本解析;dig 返回完整协议级响应,含 TTL、权威标志等;nslookup 交互模式友好但输出不稳定。
- 脚本中取 IP:用
host google.com | awk '{print $4}'比dig +short google.com更可靠(后者遇 CNAME 可能返回多行) - 调试 DNS 问题:
host -v google.com显示查询路径和响应时间,但不显示递归链路细节 - 查 SOA 记录:用
host -C google.com,不是-t SOA(后者无效)
真正容易被忽略的点是:host 默认走系统 DNS 配置,但不会读 /etc/nsswitch.conf 里的 hosts: files dns 顺序 —— 它跳过 files(即 /etc/hosts),只走 dns。如果你改过本地 hosts 绑定,host 查不到,得用 ping 或 getent hosts。这点不注意,排查时会绕弯路。











