linux无统一清dns缓存命令,须先确认服务:systemd-resolved用sudo resolvectl flush-caches(v245+)或重启服务;dnsmasq/nscd需重启;alpine默认无缓存。

Linux 没有统一的“清 DNS 缓存”命令,必须先确认当前系统实际使用的是哪个 DNS 缓存服务,再执行对应操作。盲目运行 resolvectl flush-caches 或 systemd-resolve --flush-caches 很可能报错或完全无效。
先确认你用的是哪个服务
多数现代发行版(如 Ubuntu 22.04+、Debian 12、Fedora)默认安装 systemd-resolved,但它不一定在运行:
- 运行
systemctl is-active systemd-resolved,返回 active 才说明它真在工作 - 运行
ls -l /etc/resolv.conf,若软链接指向/run/systemd/resolve/stub-resolv.conf,才表示系统解析器走的是它 - 运行
resolvectl status,看到nameserver 127.0.0.53就基本确认了
针对 systemd-resolved 清理缓存
这是目前最常见的情况。注意命令版本兼容性:
- 较新系统(systemd v245+,如 Ubuntu 22.04+/Debian 12+):直接运行
sudo resolvectl flush-caches - 旧系统不支持该子命令,改用
sudo systemctl restart systemd-resolved - 验证是否生效:运行
resolvectl statistics,看Cache current:行数字是否归零或明显下降
其他常见服务的清理方式
如果 systemd-resolved 是 inactive 或根本没装,就得查别的:
-
nscd:运行
sudo systemctl restart nscd;只刷 hosts 缓存可用sudo nscd -i hosts -
dnsmasq(常见于桌面环境或路由器):运行
sudo systemctl restart dnsmasq - Alpine Linux(musl libc):默认不缓 DNS,每次都是实时查询,无需清理
验证清理是否真正起效
别依赖 ping 或浏览器——它们可能走自己的缓存或 /etc/hosts:
- 用
getent hosts example.com,它走系统标准解析路径,受systemd-resolved或nscd控制 -
dig example.com和nslookup example.com默认绕过本地缓存,直连/etc/resolv.conf里的 nameserver;如果那里是127.0.0.53,那结果仍受 resolved 管理 - 想跳过所有本地缓存,直接查上游 DNS:运行
dig @8.8.8.8 example.com











