resolv.conf
和 hosts
文件的区别
resolv.conf
和 hosts
文件都是用于 域名解析(DNS) 的系统配置文件,但它们的 作用、使用场景和管理方式 不同。以下是两者的主要区别:
对比项 | /etc/hosts | /etc/resolv.conf |
---|---|---|
主要功能 | 静态域名到 IP 的映射(本地 DNS 记录) | 配置 DNS 服务器(指定查询 DNS 的方式) |
解析顺序 | 优先于 DNS 查询(先查 hosts,再查 DNS) | 定义如何查询外部 DNS 服务器 |
修改方式 | 手动编辑 | 可手动编辑,但可能被 DHCP 或网络管理工具覆盖 |
适用场景 | 本地开发、测试、屏蔽网站、自定义域名解析 | 配置系统默认的 DNS 服务器(如 8.8.8.8) |
动态更新 | 不会自动更新,需手动维护 | 可能被 DHCP 或 systemd-resolved 自动更新 |
文件位置 | /etc/hosts (Linux/macOS/Windows) | /etc/resolv.conf (Linux/macOS) |
典型内容 | 127.0.0.1 localhost | nameserver 8.8.8.8 |
详细对比
1. 功能不同
-
hosts
文件:- 存储 静态的域名-IP 映射,相当于一个本地的 DNS 数据库。
- 适用于:
- 开发测试(如
127.0.0.1 myapp.test
) - 屏蔽广告/恶意网站(如
0.0.0.0 ads.com
) - 强制域名指向特定 IP(如公司内网服务器)
- 开发测试(如
-
resolv.conf
文件:- 定义 如何查询 DNS,即系统应该向哪些 DNS 服务器发送查询请求。
- 适用于:
- 配置默认 DNS 服务器(如 Google DNS
8.8.8.8
) - 设置 DNS 搜索域(如
search example.com
)
- 配置默认 DNS 服务器(如 Google DNS
2. 解析顺序
当计算机访问一个域名(如 example.com
)时,解析顺序通常是:
- 先查
hosts
文件(如果有匹配,直接返回 IP,不再查询 DNS) - 如果
hosts
没有记录,再查询resolv.conf
指定的 DNS 服务器
3. 修改方式
-
hosts
文件:- 完全手动管理,不会被系统自动修改。
- 需要管理员权限才能编辑(如
sudo nano /etc/hosts
)。
-
resolv.conf
文件:- 可以手动编辑,但在现代 Linux 系统中:
- 可能被 DHCP 自动覆盖(如连接新网络时)。
- 可能由
systemd-resolved
、NetworkManager
等工具管理。
- 如果想永久修改 DNS,可能需要修改网络配置文件(如
/etc/network/interfaces
或nmcli
)。
- 可以手动编辑,但在现代 Linux 系统中:
4. 典型示例
-
hosts
文件示例:127.0.0.1 localhost 192.168.1.100 myserver.local 0.0.0.0 ads.example.com # 屏蔽广告
-
resolv.conf
文件示例:nameserver 8.8.8.8 # 使用 Google DNS nameserver 1.1.1.1 # 备用 Cloudflare DNS search example.com # 自动补全域名 options timeout:2 # 查询超时时间
总结
场景 | 使用 hosts 文件 | 使用 resolv.conf 文件 |
---|---|---|
自定义域名解析 | ✅(如 test.local → 127.0.0.1 ) | ❌(不能直接定义域名映射) |
配置 DNS 服务器 | ❌ | ✅(如 nameserver 8.8.8.8 ) |
屏蔽网站 | ✅(如 0.0.0.0 badsite.com ) | ❌ |
动态 DNS 管理 | ❌(完全手动) | ✅(可能被 DHCP 自动更新) |
结论:
hosts
→ 用于 静态、本地的域名解析(优先级高)。resolv.conf
→ 用于 配置如何查询外部 DNS(动态性更强)。