รูปแบบของ / etc / hosts บน Linux (แตกต่างจาก Windows หรือไม่)


22

วางด้านล่างคำถามนี้เป็นตัวอย่าง/etc/hostsไฟล์จาก Linux (CentOS) และเครื่อง Windows ไฟล์ Linux มีรายการแบบแท็บสองรายการหลังจากที่อยู่ IP (นั่นคือ localhost.localdomain localhost) และ Windows มีเพียงรายการเดียว หากฉันต้องการแก้ไขไฟล์โฮสต์ใน Windows ให้มีชื่อเครื่อง (etest) แทน localhost ฉันเพียงแทนที่ word localhost ด้วยชื่อเครื่องที่ฉันต้องการ เครื่องไม่จำเป็นต้องเป็นส่วนหนึ่งของโดเมน

ในเครื่อง Linux ทั้งสองรายการlocalhost.localdomainและlocalhostดูเหมือนว่าจะระบุว่าฉันจะต้องใช้เครื่องเพื่อเป็นส่วนหนึ่งของโดเมน มันเป็นเรื่องจริงเหรอ?

ฉันสามารถแก้ไขทั้งสองรายการเพื่อetestให้อ่านได้หรือไม่:

127.0.0.1       etest etest

หรือฉันจำเป็นต้องแทนที่รายการหนึ่งด้วยชื่อโดเมนหรือไม่

นอกจากนี้โปรดแจ้งให้เราทราบว่าบรรทัดที่สองของ/etc/hostsไฟล์บนเครื่อง Linux นั้นมีไว้เพื่ออะไร

::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

คำตอบ:


13

คุณต้องการให้ที่อยู่ 127.0.0.1 แก้ไขก่อนที่จะโฮสต์ localhost หากมีโดเมนคุณสามารถใช้โดเมนนั้นได้เช่นกัน แต่ให้แน่ใจว่าชื่อโฮสต์ในพื้นที่นั้นเป็นรายการที่สอง หากคุณต้องการเพิ่มนามแฝงสำหรับเครื่องของคุณที่จะค้นหาที่อยู่ลูปแบ็คคุณสามารถเพิ่มพวกเขาเป็นค่าที่คั่นด้วยช่องว่างในบรรทัดนั้น การระบุโดเมนที่นี่เป็นทางเลือก แต่ไม่ต้องลบ "localhost" ออกจากตัวเลือก


5
ด้วย ":: 1" เป็น ipv6 เทียบเท่ากับ 127.0.0.1 (สำหรับ ipv4)
XQYZ

นี่หมายความว่าการมีสายแบบนี้แทนที่จะเป็นแบบที่ฉันโพสต์ด้วยคำถามจะฉลาดกว่าหรือไม่? ฉันได้รวมนามแฝงที่คั่นด้วยช่องว่าง (etest ชื่อโฮสต์ของฉัน) ออกจาก localhost.localdomain localhost เหมือนเดิม ถ้าไม่ได้โปรดโพสต์ตัวอย่างของสิ่งที่คุณแนะนำเป็นรายการที่เหมาะที่จะรวมชื่อเครื่องของฉันและมีรายการ localhost ในไฟล์โฮสต์
โทมัส

1
127.0.0.1 localhost.localdomain localhost etest
Thomas

1
@ โทมัส: ตัวอย่างของคุณเป็นอย่างที่ควรจะเป็น ไปกับสิ่งนั้นและถ้าคุณต้องการเพิ่มนามแฝงเพิ่มเติมสำหรับการทดสอบ (เช่นชื่อโฮสต์เสมือนใน apache) คุณสามารถต่อท้ายพวกเขาไปยังบรรทัด
Caleb

22

รูปแบบของ/etc/hostsบน Linux และ Windows เหมือนกัน:

IP address        hostname [hostalias]...

โดยที่วงเล็บเป็นวิธีปกติในการระบุว่ามีบางอย่างเป็นตัวเลือก (ไม่ต้องพิมพ์จริง ๆ ) และจุด ( ...) หมายถึงอาจมีมากกว่าหนึ่ง

คุณไม่จำเป็นต้องให้โฮสต์เป็นส่วนหนึ่งของโดเมน ลองและดู แต่มันจะเป็นการดี.localdomainถ้าหากคุณไม่มีชื่อโดเมนจริง มันสามารถทำให้ความละเอียดชื่อโฮสต์นิด ๆ หน่อย ๆ ได้เร็วขึ้นเนื่องจากการที่ตัวเลือกในndots/etc/resolv.conf

โปรดทราบว่าในกรณีนี้โดเมนหมายถึงโดเมน DNS (เช่นgoogle.comหรือstackexchange.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
...

ดูรายละเอียดเพิ่มเติมได้ที่man pageของโฮสต์ (5)


(... ) หมายความว่าสามารถมีได้มากกว่าหนึ่งรายการ: การเว้นวรรคพิเศษคั่นด้วยช่องว่างหรือเครื่องหมายจุลภาคหรือทั้งสองอย่างหรือไม่
Guy

1
ช่องว่าง hostname [hostalias[,hostalias]*]ผมคิดว่ามีความถูกต้องมากขึ้นก็คือ
Mikel

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

'hostname' ด้วยตัวเองควรส่งคืนชื่ออะไรก็ตามที่คุณป้อนให้กับโฮสต์ใน /etc/conf.d/hostname หรือ / etc / hostname (ตำแหน่งของไฟล์นั้นแตกต่างกันไปตามการกระจาย แต่ควรอยู่ภายใต้ / etc ที่อื่น)

หากคุณเปลี่ยนลำดับของชื่อคุณอาจพบว่า "hostname -f" ให้การตอบสนองเช่น "localhost" หรือ "hostname: system error" การจัดเรียงเดียวที่ฉันได้พบว่าทำงานได้อย่างถูกต้องคือการวาง FQDN ก่อน

ฉันมักจะตั้งค่าที่อยู่ในท้องถิ่นของสาย IPv6 (:: 1) ในลักษณะเดียวกันเช่น:

::1 etest.mydomain.com etest localhost

ฉันรู้ว่าดิสทริบิวชันบางตัวตั้งชื่อ IPv6 เป็นอย่าง ip6-localhost ฉันยังไม่ได้ใช้ IPv6 เลยดังนั้นไม่สามารถออกความเห็นเกี่ยวกับการตั้งค่าที่ดีที่สุดสำหรับสายนี้ ฉันสามารถพูดได้ว่าในเครือข่าย IPv4 มันทำงานได้ทั้งสองบรรทัดที่มีชื่อเดียวกัน


0

เก็บไฟล์โฮสต์ Slaves ไว้เป็น

127.0.0.1 localhost

เก็บไฟล์โฮสต์หลักไว้เป็น

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

ทำงาน 100%


โปรดชี้แจงคำตอบของคุณและใช้การจัดรูปแบบที่เหมาะสม คุณไม่จำเป็นต้องใส่ชื่อในคำตอบของคุณ
Lambert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.