Linux上/ etc / hosts的格式(不同于Windows?)


22

在此问题下粘贴的是/etc/hosts来自Linux(CentOS)和Windows计算机的文件示例。Linux文件在IP地址(即localhost.localdomain localhost)之后有两个选项卡式条目,而Windows只有一个。如果要在Windows中编辑hosts文件以使用计算机名(etest)而不是localhost,则只需将localhost替换为所需的计算机名。机器不必是域的一部分。

在Linux机器,两个条目localhost.localdomain,并localhost似乎表明我需要的机器是一个域的一部分。这是真的?

我可以简单地将两个条目都编辑为etest,以使其显示为:

127.0.0.1       etest etest

还是要求我用域名代替一个条目?

此外,请让我知道/etc/hostsLinux计算机上文件的第二行是什么。

::1     localhost6.localdomain6 localhost6

hosts Linux机器上的文件:

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6

hosts Windows机器上的文件:

# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost

我最近发布了一个类似的问题,但是并没有引起太多兴趣。unix.stackexchange.com/questions/11844/etc-hosts-for-debian。不过,这本书写得更好。
Faheem Mitha

Answers:


13

您始终希望127.0.0.1地址首先解析为localhost。如果有一个域,您也可以使用它,但是请确保将localhost列在第二位。如果要为计算机添加别名,以查找回送地址,则可以在该行上将它们作为空格分隔的值添加。在此处指定域是可选的,但不要从选项中删除“ localhost”。


5
同样,“ :: 1”也等于ipv6的127.0.0.1(适用于ipv4)。
XQYZ 2011年

这是否意味着用这样的话语代替我在问题中发帖的话会更明智?我提供了一个以空格分隔的别名(请测试我的主机名),而localhost.localdomain localhost则保持不变。如果不是,请发布一个建议的示例作为理想条目,以包括我的计算机主机名并在hosts文件中包含localhost条目。
托马斯(Thomas)

1
127.0.0.1 localhost.localdomain localhost etest
Thomas

1
@Thomas:您的示例是正确的。这样做,如果您需要添加更多别名进行测试(例如,在Apache中使用虚拟主机的名称),则可以继续将其附加到该行中。
卡莱布(Caleb)

22

/etc/hostsLinux和Windows上的格式相同:

IP address        hostname [hostalias]...

其中的括号是通常的方式,表示某些内容是可选的(实际上不键入它们),而点(...)表示可以有多个。

您不必使主机成为域的一部分。试试看。但是,.localdomain如果您没有真实的域名,则最好使用。由于中的ndots选项,它可以使主机名解析更快一些/etc/resolv.conf

请注意,从这个意义上说,域是指DNS域(例如google.comstackexchange.com),而不是Windows域或类似的东西。

以开头的行::1是针对IPv6的::1就像127.0.0.1在新的寻址方案下一样。运行ifconfig lo,您应该看到它有两个地址。请注意以开头的条目inet6

$ ifconfig lo
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
...

有关更多详细信息,请参见hosts(5)手册页


(...)表示可以有多个:多余的内容是否用空格或逗号或两者分隔?
2014年

1
空格。我想更正确的是hostname [hostalias[,hostalias]*]
米克尔

6

我不能说Windows与Linux有何不同,但是本地计算机的定义格式会影响您从“主机名”命令获得的结果。

我发现最一致有效的格式是:

127.0.0.1 etest.mydomain.com etest localhost

我发现重要的是首先拥有FQDN,其后有别名(以任何顺序)。

如果您尝试在IP地址之后重新排列名称,然后使用“主机名-s”(简称)和“主机名-f”(完全限定域名或FQDN)命令,您会明白我的意思。它看起来应该像这样:

$ hostname -s
etest

$ hostname -f
etest.mydomain.com

“主机名”本身应返回您在/etc/conf.d/hostname或/ etc / hostname中为主机输入的任何名称(文件的位置因分布而异,但应在/ etc下的某个位置找到)。

如果更改名称的顺序,则可能会发现“主机名-f”会给您类似“本地主机”或“主机名:系统错误”的响应。我发现唯一可以正常工作的安排是将FQDN放在首位。

我总是以相同的方式设置IPv6本地地址行(:: 1),即:

::1 etest.mydomain.com etest localhost

我知道有些发行版将IPv6名称设置为ip6-localhost。我尚未真正使用IPv6,因此无法评论此行的最佳设置。我只能说在IPv4网络中,两行名称相同。


0

保持奴隶主机文件为

127.0.0.1 localhost

保留主主机文件为

<private ip> master
<private ip> slave1
<private ip> slave2

100%工作


请阐明您的答案并使用正确的格式。您无需在答案中输入姓名。
兰伯特
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.