linux无统一dns缓存,清理前须确认解析器:用ls -l /etc/resolv.conf、resolvectl status、systemctl is-active systemd-resolved及ps aux | grep dnsmasq/nscd等命令定位服务;再按systemd-resolved(resolvectl flush-caches)、nscd(systemctl restart nscd)或dnsmasq(systemctl restart dnsmasq)分别清理。

Linux 没有统一的本地 DNS 缓存机制,是否能清理、怎么清理,完全取决于你系统里实际运行的是哪个解析服务。不是所有 Linux 都在缓存 DNS,有些甚至压根没开——所以别急着刷,先搞清“谁在管”。
确认当前生效的 DNS 解析器
运行以下命令快速定位:
-
ls -l /etc/resolv.conf:如果指向
/run/systemd/resolve/stub-resolv.conf,大概率是systemd-resolved在工作;若指向/run/NetworkManager/resolv.conf,说明 NetworkManager 主导;如果是手动写的nameserver 8.8.8.8,那很可能没启用任何缓存服务 -
resolvectl status:输出中看到
127.0.0.53或明确列出 DNS 服务器,基本可确认systemd-resolved正在接管 -
systemctl is-active systemd-resolved:返回
active才代表服务真在运行;若为inactive或报错,resolvectl flush-caches就无效 - ps aux | grep -E 'dnsmasq|nscd|unbound':检查是否有其他缓存进程在后台跑
清理 systemd-resolved 缓存(现代发行版默认)
Ubuntu 20.04+、Debian 12、Fedora、CentOS 8+ 等大多默认启用它。缓存存在内存中,刷新即可加速新记录生效:
- 执行 sudo resolvectl flush-caches(推荐,新版本标准命令)
- 旧版可用 sudo systemd-resolve --flush-caches
- 验证是否清空:resolvectl statistics 查看
Cache current:行数字是否归零或明显下降 - 注意:
dig和nslookup默认绕过系统解析器,直连/etc/resolv.conf里的 nameserver;若该地址是127.0.0.53,它们查到的仍是systemd-resolved的结果,但需结合 TTL 判断是否真来自缓存
清理 nscd 缓存(传统服务器常见)
nscd 常见于 CentOS 7、RHEL 7 或某些定制环境,它缓存 hosts、用户、DNS 等多类信息:
- 检查状态:sudo systemctl status nscd
- 全量清空:sudo systemctl restart nscd
- 仅清 hosts 缓存(不影响用户/组):sudo nscd -i hosts
- 极端情况(缓存文件损坏):停服务 → 清空
/var/cache/nscd/*→ 重启服务
清理 dnsmasq 缓存(开发/内网/路由器常用)
dnsmasq 更灵活,支持自定义 hosts、TTL 控制和域名分流,适合需要精细管理的场景:
- 检查是否运行:sudo systemctl status dnsmasq
- 清空缓存:sudo systemctl restart dnsmasq
- 若配合 NetworkManager 使用,建议同步操作:sudo systemctl restart NetworkManager && sudo resolvectl flush-caches,避免 DNS 配置未更新导致缓存仍走旧上游











