linux中配置host域名解析需编辑/etc/hosts文件,通过sudo权限添加“ip 域名”映射,支持多域名空格分隔、#注释及ipv6,可用nano/vim或tee追加,生效后用ping/host验证,注意格式、权限及nsswitch.conf优先级。

Linux 系统中配置 Host 域名解析,核心就是编辑 /etc/hosts 文件,让系统在发起网络请求前优先查本地映射,跳过 DNS 查询。它不依赖网络服务,修改后立即生效(部分程序需重启),适合开发调试、屏蔽广告或临时访问内部服务。
直接编辑 /etc/hosts 文件
这是最常用也最直观的方式,需要 root 权限:
- 用 nano 编辑:运行 sudo nano /etc/hosts,在文件末尾新增一行,格式为 IP地址 域名 [别名],例如:
127.0.0.1 myapp.local api.myapp.local - 用 vim 编辑:运行 sudo vim /etc/hosts,按 i 进入插入模式,添加同样格式的行,完成后按 Esc,输入 :wq 保存退出
- 注意:每行只能有一个 IP,但可对应多个域名(用空格分隔);注释用 # 开头;IPv6 地址用 ::1 表示本地回环
用 tee 命令安全追加条目
适合脚本批量操作,避免误删已有内容:
- 执行 sudo tee -a /etc/hosts > /dev/null
- 接着输入要添加的行,例如:
192.168.50.10 devdb.internal - 再输入 EOF 并回车,即完成追加
- 该方式不会覆盖原文件,只追加,安全性更高
验证映射是否生效
改完不能只靠“感觉”,得实测:
- 用 ping -c 2 myapp.local 看返回的是否是你设定的 IP
- 用 host myapp.local 查看解析结果——如果显示的是你写的 IP,说明 hosts 生效;若显示 DNS 返回的结果,可能是格式错误或被其他服务缓存干扰
- 某些应用(如浏览器、curl)可能缓存 DNS,可尝试重启应用,或临时用 getent hosts myapp.local 直接调用系统解析器验证
注意事项与常见问题
hosts 映射虽简单,但几个细节容易踩坑:
- 权限必须足够:所有修改都要 sudo,否则保存会失败
- 格式要严格:IP 和域名之间用至少一个空格分隔,不能用 Tab 或中文符号;行首不能有空格
- 优先级虽高,但受 /etc/nsswitch.conf 控制——默认配置中 hosts: files dns 表示先查 files(即 hosts),再查 DNS,无需额外调整
- 部分桌面环境或容器化应用(如 Docker Desktop)可能绕过 hosts,需单独配置其内部 DNS 或使用 --add-host 参数











