/ etc / hosts的目的是什么?


21

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

127.0.0.1 localhost 

将在那里。为什么?

  • /etc/hosts在像Cassandra这样的JVM系统中如何工作?
  • DNS什么时候可以替代,我想不是在一台计算机上吗?


我的/etc/hosts包含文件,127.0.0.2 mycouchdb bookmarkdb myothercouchapp127.0.0.3 myapachi website使用它们来帮助我在本地计算机上运行我的开发。我有3个服务在端口80上侦听。我不想将它们放在DNS上,因为它们只是本地的。
ctrl-alt-delor

你试过了man 5 hosts吗?
恢复莫妮卡-M.Schröder18年

Linux没有为此提供详细说明的手册页吗?这是最基本的问题。
罗布

Answers:


45

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

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

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

127.0.0.1      localhost

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

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


1好,名称解析的顺序实际上是在中定义的/etc/nsswitch.conf,通常具有以下条目:

hosts:          files dns

表示“尝试文件(/etc/hosts);如果失败,请尝试DNS”。

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


2(当前)主机文件包含由第一行文本字段中的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

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

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


5

使用/ etc / hosts文件为桌面环境中的本地系统提供易于理解的名称是完全合理的。主机文件非常适合在家庭网络甚至小型企业环境中使用。这不能像Internet寻址那样是公共方面的-那么您需要DNS。如果本地网络足够大,或者简单地切入了不同的子网,或者出于任何其他有用的原因,则首选DNS。

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


4
我不同意冲突,我遇到了许多难以调试的问题,因为按组进行主机配置留下了陈旧的/etc/hosts条目,将来会导致按组进行操作(我的组)失败,我们最终设置了一些内容以对/etc/hosts
thrig

文件内的冲突可能会偏离路线,但那是机器所有者的错:)
francois P

2
我也不同意从来没有任何冲突。由于陈旧的主机条目与DNS更改冲突,我不得不调试非常奇怪的错误
Rui F Ribeiro '18

@thrig:也许问题在于您的组太大,无法有效使用/ etc / hosts。目前,我的家庭网络上的5台机器运行良好。
jamesqf

好了,系统认为没有冲突,它对事物的优先级有明确的说明:p
StarWeaver

3

在linux中,我敢说我至少应该127.0.0.1 localhost在文件/etc/hosts 中以及localhost的对应IPv6地址中始终存在 。

它只是将主机名解析为数字IPv4或IPv6地址。当您尝试网络(一)unix.stackexchange.com地球上的某处,很可能不是你靠近,或(b)myotherpc在您家中的局域网上,它要么是/etc/hosts或某些域名服务器(DNS)是正在执行主机解析,因此当您键入unix.stackexchage.com时(您是在乎人类),您不必记住185.53.179.7,这是计算机真正需要知道的。

如前所述,在linux中/etc/nsswitch通常定义主机名解析顺序,即先检查DNS再检查NIS,然后最后检查文件,/etc/hosts否则找不到主机。

如何管理订单检查以及如何/在哪里/由谁管理DNS或NIS服务由您决定,或者您可以通过修改/ etc / nsswitch使其仅进行检入/etc/hosts而从不检查DNS或NIS或... 来覆盖所有内容。

对于只有几台计算机的简单家庭网络(例如2到N),管理员只需/etc/hosts在每台计算机上进行正确编辑即可,比将域名服务器或某些其他服务设置为拥有一个主位置或更简单,更快捷,更便宜授权将主机名解析为IP地址。

Linux网络搜索的历史和原因localhost。linux中的许多事情都依赖于名称localhost解析为127.0.0.1,如果不执行,将导致问题,并且此localhost定义将/应该在本地系统文件(例如/ etc / hosts)中发生。

/etc/hosts缺省情况下,通常使用linux操作系统的最终决定权是主机名称解析。在Windows XP和7中,对应的文件是C:\Windows\System32\drivers\etc\lmhosts Windows 8或10。


主机文件的一种典型用法(尤其是在Windows中)是将程序“回拨”的尝试转移到空设备。我认为这可能是阻碍合法性检查的对象。
劳伦斯·佩恩

我仍然没有在iPhone上找到可以编辑/ etc / hosts的编辑器...所以我在局域网上运行DNS
ivanivan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.