直接修改 /etc/hosts 文件可实现本地域名解析,无需DNS;需root权限编辑,格式为“IP 域名”,支持注释、IPv6及多别名,保存后立即生效,优先级最高但需注意拼写、重复条目及容器隔离问题。

直接修改 /etc/hosts 文件就能让 Linux 本地跳过 DNS,用你指定的 IP 解析域名。它生效快、不依赖网络,适合开发测试、屏蔽网站或临时调试。
确认文件位置和权限
/etc/hosts 是标准路径,所有主流发行版(Ubuntu、CentOS、Debian 等)都一样。你必须用 root 权限编辑:
- 用 nano:sudo nano /etc/hosts
- 用 vim:sudo vim /etc/hosts
- 编辑前建议先备份:sudo cp /etc/hosts /etc/hosts.bak
按规范添加映射条目
每行一条,格式为:IP地址 域名 [别名],用空格或制表符分隔。例如:
- # 开发环境
- 127.0.0.1 dev.example.com api.dev.local
- # 指向测试服务器
- 192.168.1.50 backend.test
- # IPv6 支持(可选)
- ::1 dev.example.com
注意:以 # 开头的行是注释;域名不能带 http:// 或端口;一行可写多个别名,但不要换行。
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
保存后立即验证是否生效
修改保存后无需重启服务,大多数命令会立刻读取新配置:
- ping -c 1 dev.example.com → 应返回你填的 IP
- getent hosts dev.example.com → 直接查 hosts 映射,不走 DNS
- curl -v http://dev.example.com → 看请求是否发到目标 IP
如果 ping 通但浏览器打不开,可能是应用自身缓存了旧 DNS 结果,可尝试重启浏览器或清空系统 DNS 缓存(部分发行版需 systemctl restart systemd-resolved)。
常见问题与避坑提示
hosts 文件优先级最高,但容易被覆盖或忽略:
- 某些桌面环境(如 GNOME)或 NetworkManager 可能自动重写 /etc/resolv.conf,间接影响解析行为,但不影响 hosts 本身
- 容器内默认不继承宿主机的 hosts,需用 --add-host 或自定义 /etc/hosts 挂载
- 如果加了条目却没生效,检查是否拼写错误、IP 是否可达、是否有重复条目导致覆盖
- 想屏蔽网站?写 0.0.0.0 badsite.com 或 127.0.0.1 badsite.com 都可以

















