Linux 下没有像 Windows 那样一个固定的dns_cache 文件,DNS 缓存的存储方式取决于你系统上运行的是哪个DNS 缓存服务(比如systemd-resolved、dnsmasq、nscd 等),每个服务的缓存位置和清理方法都不同。
以下是针对最常见情况的清理方法和缓存文件位置说明:
1. 最常见的服务:systemd-resolved(Ubuntu 18.04+,Fedora,Arch 等)
这是大多数现代 Linux 发行版默认使用的 DNS 缓存服务。
缓存文件位置:
主要存储在内存 中,但持久化配置和状态文件在/run/systemd/resolve/ 目录下。
stub-resolv.conf: 实际使用的 DNS 配置
resolv.conf: 传统兼容配置
- 具体的 DNS 缓存条目并没有可以直接编辑的文本文件,它们保存在内存数据库中。
清理命令:
sudo systemd-resolve --flush-caches或者在新版 systemd(v247+)中:
sudo resolvectl flush-caches检查缓存统计:
sudo systemd-resolve --statistics 如果输出中Current Cache Size 变为 0,说明清理成功。
2. 较老或自建的缓存服务:dnsmasq
主要用于服务器或直连网络(如虚拟机内部)。
缓存位置:
dnsmasq 默认将缓存保存在内存中,但可以配置为使用文件持久化(很少见),通常没有传统意义上的“缓存文件”,记录在进程内存里。
清理命令:
# 重启服务来清空内存中的缓存
sudo systemctl restart dnsmasq 或者向 dnsmasq 进程发送SIGHUP 信号(重新加载配置并清空缓存):
sudo killall -HUP dnsmasq检查缓存:
查看/var/log/messages 或/var/log/syslog 中的 dnsmasq 日志。
3. 另一个缓存服务:nscd (Name Service Cache Daemon)
比较老的服务,在某些 RHEL/CentOS 6/7 或需要缓存hosts 和passwd 的系统中使用。
缓存文件位置:
各种缓存数据库文件存放在/var/cache/nscd/ 目录下。
hosts: DNS 查询的缓存(二进制文件,不能直接查看)
passwd、group、services 等
- 注意:这些文件是 nscd 的内部分段数据库,不要手动编辑或删除。
清理命令(只清 DNS 缓存):
sudo nscd -i hosts或者重启 nscd 服务(清空所有缓存):
sudo systemctl restart nscd检查缓存:
可以使用strings 查看二进制文件(不推荐),或用nscd -g 查看统计信息。
4. 没有本地缓存服务(直接使用上游 DNS)
如果你的系统没有 运行上述任一服务(常见于 Docker 容器,或 /etc/resolv.conf 直接指向外部 DNS 如 8.8.8.8),那么Linux 内核本身不缓存 DNS(除非使用了dns-resolver 这样的额外模块,默认不开启)。
这种情况下,清空缓存只需要:
如果修改了 /etc/resolv.conf,可能需要重启网络服务 sudo systemctl restart NetworkManager # 或 systemd-networkd
但本质上没有缓存需要清理。
重要提醒:Linux 清理 DNS 缓存只管操作系统级别的缓存,Chrome、Firefox、Nginx 等应用程序都有自己的 DNS 缓存,需要各自清理:
Chrome: 地址栏输入chrome://net-internals/#dns -> 点击“Clear host cache”
Firefox: 地址栏输入about:networking#dns -> 点击“Clear DNS Cache”
curl / wget: 不缓存,每次都会请求 DNS
如果你是普通用户(Ubuntu/Debian/Fedora/Arch 等现代发行版):
1、直接尝试:
sudo systemd-resolve --flush-caches如果报错,说明没用这个服务。
2、如果不行:
sudo systemctl restart NetworkManager # 重启网络,连带刷新一切或者查看当前使用的服务:
systemctl list-units | grep -E 'dnsmasq|systemd-resolved|nscd'3、最后的手段:
完全重启系统(sudo reboot),虽然粗暴但能清除一切状态。
文件在哪里”:
对于 Linux DNS 缓存几乎都是在内存里,不是可读的文本文件,唯一的例外是nscd 在/var/cache/nscd/ 下产生的二进制数据库文件,但也不建议直接操作它们。
文章摘自:https://idc.huochengrm.cn/dns/26552.html
评论