linux无统一dns缓存命令,需先确认服务:运行systemctl is-active systemd-resolved,返回active且/etc/resolv.conf软链至/run/systemd/resolve/stub-resolv.conf,再执行resolvectl flush-caches;否则应检查dnsmasq、nscd等其他服务并针对性清理。

Linux 没有统一的“刷新 DNS 缓存”命令,必须先确认系统实际用的是哪个服务,否则 resolvectl flush-caches 或 systemd-resolve --flush-caches 很可能直接报错或完全无效。
怎么判断当前系统用的是 systemd-resolved?
现代发行版(Ubuntu 22.04+、Debian 12、Fedora)默认启用它,但不等于它在运行:
- 运行
systemctl is-active systemd-resolved—— 返回active才说明服务真在跑;若为inactive或failed,resolvectl flush-caches会报No such file or directory或Unit dbus-org.freedesktop.resolve1.service not found - 检查
/etc/resolv.conf是否软链接到/run/systemd/resolve/stub-resolv.conf:用ls -l /etc/resolv.conf看,如果不是,resolvectl刷的缓存对curl、wget等多数程序没影响 -
resolvectl status输出里有Global或Link下明确列出 nameserver(如127.0.0.53),基本可确认是它在管
resolvectl flush-caches 刷了但 dig/nslookup 还走旧记录?
这不是缓存没清,而是工具行为差异:
-
dig和nslookup绕过系统解析器,直连/etc/resolv.conf里写的 nameserver;如果该地址是127.0.0.53(systemd-resolved 的 stub listener),那缓存确实已清——只是你看到的“旧结果”来自上游 DNS 的 TTL,不是本地缓存 - 验证是否真清了:运行
resolvectl statistics,看Cache current:行数字是否归零或明显下降 - 测真实应用行为,别用
ping example.com:glibc 自己缓 host 条目,得重启进程或改/etc/nsswitch.conf;推荐用getent hosts example.com,它走 libc 的getaddrinfo(),受 systemd-resolved 控制
系统没 systemd-resolved 怎么办?
老系统(CentOS 7)、精简镜像(Alpine)、或手动配了其他服务时,得按实际组件操作:
-
nscd:先确认/etc/nscd.conf里enable-cache hosts yes已开启,再执行sudo systemctl restart nscd;只刷 hosts 缓存可用sudo nscd -i hosts -
dnsmasq:常见于 NetworkManager 桌面环境或路由器,执行sudo systemctl restart dnsmasq;注意 NetworkManager 可能自动推 DNS 配置,清完缓存后 DHCP 更新又覆盖回去,建议组合操作:sudo systemctl restart NetworkManager && sudo resolvectl flush-caches - Alpine(musl libc):默认不缓 DNS,每次都是新查;但若装了
unbound,就得用sudo unbound-control flushall;若用dnsmasq,重启对应服务即可
浏览器或 Java 应用 DNS 缓存不受系统命令影响
这些是应用层独立缓存,systemd-resolved 或 nscd 清不掉:
- Chrome / Edge:访问
chrome://net-internals/#dns点 “Clear host cache” - Firefox:访问
about:networking#dns点 “Clear DNS Cache” - Java:JVM 默认缓存 30 秒,需启动时加
-Dsun.net.inetaddr.ttl=0禁用;已有进程无法热清,只能重启
最容易被忽略的一点:DNS 缓存不止在本机。路由器、ISP、甚至 CDN 都可能缓存结果,resolvectl flush-caches 只动本地内存中未过期的正向记录,TTL 始终由上游决定。真要验证,得用 dig +trace example.com 看完整链路,而不是只盯 dig example.com 的返回。











