Linux怎么清理DNS缓存,缓存文件在哪里?

HCRM技术_小炮 DNS 2026-06-13 5 0

Linux 下没有像 Windows 那样一个固定的dns_cache 文件,DNS 缓存的存储方式取决于你系统上运行的是哪个DNS 缓存服务(比如systemd-resolveddnsmasqnscd 等),每个服务的缓存位置和清理方法都不同。

以下是针对最常见情况的清理方法和缓存文件位置说明:

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 或需要缓存hostspasswd 的系统中使用。

缓存文件位置

各种缓存数据库文件存放在/var/cache/nscd/ 目录下。

hosts: DNS 查询的缓存(二进制文件,不能直接查看)

passwdgroupservices

- 注意:这些文件是 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

评论