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

Tho*_*mas 26 linux hosts

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

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

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

127.0.0.1       etest etest
Run Code Online (Sandbox Code Playgroud)

还是需要我用一个域名替换一个条目?

另外,请让我知道/etc/hostsLinux 机器上文件的第二行是做什么用的。

::1     localhost6.localdomain6 localhost6
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Mik*_*kel 25

/etc/hostsLinux 和 Windows 上的格式是一样的:

IP address        hostname [hostalias]...
Run Code Online (Sandbox Code Playgroud)

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

你不应该让你的主机成为域的一部分。试试看。但是,.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
...
Run Code Online (Sandbox Code Playgroud)

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


Cal*_*leb 15

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

  • “::1”也是 127.0.0.1(用于 ipv4)的 ipv6 等价物。 (6认同)

小智 7

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

我发现最一致的格式是这样的:

127.0.0.1 etest.mydomain.com etest localhost
Run Code Online (Sandbox Code Playgroud)

我发现的重要事情是首先使用 FQDN,然后以任何顺序使用别名。

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

$ hostname -s
etest

$ hostname -f
etest.mydomain.com
Run Code Online (Sandbox Code Playgroud)

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

如果您更改名称的顺序,您可能会发现“hostname -f”会给您诸如“localhost”或“hostname: system error”之类的响应。我发现唯一可以正常工作的安排是将 FQDN 放在首位。

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

::1 etest.mydomain.com etest localhost
Run Code Online (Sandbox Code Playgroud)

我知道有些发行版将 IPv6 名称设置为类似 ip6-localhost 的名称。我还没有真正使用 IPv6,所以不能评论这条线路的最佳设置是什么。我只能说,在 IPv4 网络中,两条线路都可以使用相同的名称。