/etc/hosts 的目的是什么?

Mik*_*sta 31 dns etc hosts

据我所知,该hosts文件是帮助在计算机网络中寻址网络节点的几种系统工具之一。但里面应该有什么?当我默认安装 Ubuntu 时

127.0.0.1 localhost 
Run Code Online (Sandbox Code Playgroud)

将在那里。为什么?

  • /etc/hosts在 Cassandra 等 JVM 系统的情况下如何工作?
  • DNS 什么时候替代,我猜不是在一台计算机上?

ImH*_*ere 55

该文件/etc/hosts始于 DARPA 的旧时代,作为连接到 Internet 的所有主机的解析文件(在 DNS 存在之前)。它具有最高优先级,这意味着该文件优先于任何其他名称系统。1

但是,作为单个文件,它不能很好地扩展:文件的大小很快就会变得太大。这就是为什么要开发 DNS 系统,一个分层的分布式名称系统。它允许任何主机有效地找到其他主机的数字地址。

文件的非常古老的概念/etc/hosts非常简单,只是一个地址和一个主机名:

127.0.0.1      localhost
Run Code Online (Sandbox Code Playgroud)

对于每一行。这是一个简单的地址-主机对列表。2

它目前的主要用途是绕过 DNS 解析。在/etc/hosts文件中找到的匹配项将在任何 DNS 条目之前使用。事实上,如果localhost在文件中找到搜索的名称(如),则根本不会执行 DNS 解析。


1好吧,名字解析的顺序其实是在 中定义的/etc/nsswitch.conf,里面通常有这样的条目:

hosts:          files dns
Run Code Online (Sandbox Code Playgroud)

这意味着“尝试文件 ( /etc/hosts);如果失败,请尝试 DNS。”

但该顺序可以更改或扩展。


2(现在)hosts 文件包含的文本行由第一个文本字段中的 IP 地址和一个或多个主机名组成。每个字段都由空格分隔 - 由于历史原因,通常首选制表符,但也使用空格。可以包括注释行;它们在这些行的第一个位置用八字形 (#) 表示。文件中完全空白的行将被忽略。例如,典型的主机文件可能包含以下内容:

127.0.0.1   localhost loopback
::1         localhost localhost6 ipv6-localhost ipv6-loopback mycomputer.local
192.168.0.8 mycomputer.lan
10.0.0.27   mycomputer.lan
Run Code Online (Sandbox Code Playgroud)

此示例包含系统的回送地址及其主机名的条目,第一行是主机文件的典型默认内容。第二行有几个额外的(可能只在本地系统中有效)名称。该示例说明一个 IP 地址可能有多个主机名(localhost 和环回),并且一个主机名可以映射到 IPv4 和 IPv6 IP 地址,分别如第一行和第二行所示。一个名称 ( mycomputer.lan) 可以解析为多个地址 ( 192.168.0.8 10.0.0.27)。但是,在这种情况下,使用哪一个取决于为计算机设置的路由(及其优先级)。

一些较旧的操作系统无法报告给定名称的地址列表。


fra*_*s P 5

使用 /etc/hosts 文件为桌面环境中的本地系统提供一个人类可读的名称是完全合理的。主机文件非常适合在家庭网络甚至小型企业环境中使用。这不能像互联网寻址那样是公共方面——那么你需要 DNS。如果本地网络足够大,或者干脆切入不同的子网,或者其他任何有用的原因,首选DNS。

本地主机文件和 DNS 以不同的优先级进行管理,因此永远不会有任何冲突。

  • 我不同意冲突,我遇到了许多难以调试的问题,因为 host-provision-by-group-A 留下了陈旧的 `/etc/hosts` 条目,这些条目将来会导致操作-by-group-B (我的小组)失败,我们最终设置了一些东西来清理`/etc/hosts`的内容 (4认同)
  • 我也不同意从来没有任何冲突。由于陈旧的主机条目与 DNS 更改冲突,我不得不调试*非常奇怪的错误*。 (2认同)