Linux如何配置hosts文件_Linux hosts文件配置教程

浅晨同学_4300

浅晨同学_4300

2026-04-04

895人浏览

原创

直接修改 /etc/hosts 立即生效,但格式错误(如中文空格、非法ip、bom等)会导致单行失效甚至解析异常;需确保每行用英文空格或制表符分隔、注释独占一行、本机名正确映射,且 /etc/nsswitch.conf 中 hosts: 行包含 files。

linux如何配置hosts文件_linux hosts文件配置教程

直接改 /etc/hosts 就生效,但格式错一行就全失效

Linux 的 /etc/hosts 是纯文本本地解析表,改完立刻生效(无需重启、不用 flushdns),但系统按行严格解析:只要某一行格式不对(比如 IP 和域名之间用了中文空格、多了不可见字符、IP 写成 127.0.0.1. 带了点),这一行就会被跳过,后续依赖它的服务(如 curl、ssh、hostname -f)可能静默失败。

实操建议:

  • 用 sudo nano /etc/hosts 或 sudo vim /etc/hosts 编辑,避免图形编辑器插入 BOM 或换行符异常
  • 每行只写一个 IP + 一个或多个域名,用**英文空格或制表符**分隔,不要混用
  • 注释必须以 # 开头且独占一行,127.0.0.1 example.com # 注释 这种写法在部分 libc 实现里会被截断,不推荐
  • Android 系统不支持单行多域名,必须拆成多行;普通 Linux 发行版支持,但为兼容性建议也拆开

ping 能通但 hostname -f 报错,大概率是 /etc/hosts 里缺本机映射

hostname -f 要返回 FQDN(完整域名),它会先查内核主机名(hostname 输出),再反向查 /etc/hosts 或 DNS。如果 /etc/hosts 没有把当前主机名映射到一个可路由的 IP(至少得是 127.0.0.1 或本机真实 IP),就会报 hostname: Unknown host。

常见错误配置:

  • 只加了 127.0.0.1 localhost,但没加 127.0.0.1 myhost(其中 myhost 是 hostname 命令输出的值)
  • 写了 127.0.0.1 myhost.local,但内核主机名是 myhost,不带 .local
  • 重复写了两行都指向 myhost,系统只认第一行,第二行里的 IP 就浪费了

验证方法:hostname 查当前名 → 在 /etc/hosts 里找对应行 → 确保该行 IP 可 ping 通(比如 ping -c1 $(hostname))。

修改后 curl 还连老 IP?检查 /etc/nsswitch.conf 的 hosts: 行

Linux 不是无条件读 /etc/hosts,它按 /etc/nsswitch.conf 里 hosts: 那一行的顺序决定解析优先级。如果写成 hosts: dns,那 /etc/hosts 根本不会被查;正确应是 hosts: files dns(files 指 hosts 文件,dns 指 DNS 服务器)。

容易被忽略的点:

  • 某些容器镜像或最小化安装系统会删掉 files,只剩 dns,导致改了 /etc/hosts 也无效
  • systemd-resolved 启用时,hosts: 可能是 resolve [!UNAVAIL=return] files,此时仍走 files,但需确认 systemd-resolved 本身没拦截本地查询
  • 改完 /etc/nsswitch.conf 不需要重启,glibc 解析器每次调用都会重新读取

批量加 hosts 条目时,别用重定向覆盖原文件

用 echo "192.168.1.100 node1" >> /etc/hosts 看似方便,但并发执行或脚本误操作容易导致内容错乱(比如两行同时写,中间夹断)。更安全的做法是原子化追加:

  • 用 tee -a: echo "192.168.1.100 node1" | sudo tee -a /etc/hosts > /dev/null
  • 或者先生成临时文件,再用 sudo cp temp_hosts /etc/hosts 替换(注意保留原文件权限: sudo cp -p temp_hosts /etc/hosts)
  • 绝对不要用 sudo echo "..."> /etc/hosts —— 重定向由 shell 执行,没有 root 权限,会报 Permission denied

另外,/etc/hosts 解析是**从上到下匹配,遇到第一个匹配就停**,所以高频访问的域名尽量靠前,避免每次都要扫完整个文件。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3503

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

775

4

vim保存退出命令
vim保存退出命令

vim是一个非常强大的文本编辑器,常用于Unix和Linux系统。它是从vi发展而来的,相比vi有许多改进和扩展。在vim中,保存并退出的命令是:wq"wq"这个命令是由两个部分组成的。其中,"w"表示写入文件,将所做的更改保存到磁盘;而"q"表示退出vim编辑器。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.01

329

3

android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

902

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2607

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

4897

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

625

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习