ทำไม“ ชื่อโฮสต์ --fqdn” ไม่ทำงานบนคอมพิวเตอร์ Ubuntu ของฉัน


10

ฉันใช้อูบุนตู 10.04 LTS และเมื่อฉันพิมพ์คำสั่งฉันได้รับข้อความนี้:hostname --fqdnhostname: Name or service not known

ด้วยเหตุนี้ฉันจึงติดตั้งไม่globalสำเร็จและได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันลอง:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

ของฉัน/etc/nsswitch.confอยู่ด้านล่าง

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

ไม่มีใครมีความคิดใด ๆ เกี่ยวกับความหมายของสิ่งนี้และฉันจะแก้ไขได้อย่างไร


1
ทำไมคุณถึงต้องการ FQDN หากคุณต้องถามคุณอาจไม่ต้องการอย่างใดอย่างหนึ่งหรือไม่สามารถใช้อย่างใดอย่างหนึ่งหรือทั้งสองอย่าง
msw

คำตอบ:


11

คุณสามารถให้เนื้อหาของ/etc/nsswitch.conf?

ดูเหมือนว่า /etc/nsswitch.conf จะมีค่าที่ไม่ดีสำหรับบรรทัด "hosts" มันเริ่มต้นด้วย "ไฟล์" หรือไม่?

มิฉะนั้นจะมีการตั้งค่า FQDN โดยแก้ไข / etc / hosts และวาง FQDN ลงในบรรทัดที่ชื่อโฮสต์ปรากฏ สมมติว่าคุณมีชื่อโฮสต์ "foo" และคุณพบบรรทัด:

127.0.0.1 foo

คุณจะแก้ไขแบบนี้:

127.0.0.1 foo.localdomain foo

foo.localdomain จะเป็น FQDN ใหม่ของคุณ


ฉันได้รวมเนื้อหาของไฟล์นั้นตามที่คุณถาม! ขอบคุณสำหรับการตอบกลับ!! :)
RadiantHex

@Rapael ฉันเปลี่ยนไฟล์ / etc / hosts แต่มันเริ่มทำให้ฉันล้มเหลวชั่วคราวในการแก้ไขชื่อ ความคิดใด ๆ ว่าทำไมมันเกิดขึ้น?
มูฮัมหมัด Adeel Zahid

6

แก้ไข / etc / hosts เพื่อเพิ่ม FQDN ของคุณ

ข้อมูลเกี่ยวกับไวยากรณ์อยู่ที่นี่: http://www.faqs.org/docs/securing/chap9sec95.html

อัปเดต: อ่านคำถามของคุณอีกครั้งดูเหมือนว่าคุณจะไม่ได้ตั้งค่าเส้นทางไว้อย่างถูกต้องหรือมีบางอย่างผิดปกติกับโปรแกรมชื่อโฮสต์

ทำ 'ชื่อโฮสต์ใด'

มันควรกลับมาพร้อมกับเส้นทาง '/ bin / hostname'

หากใช้งานได้ลองคำสั่งอีกครั้งเช่น

'/ bin / ชื่อโฮสต์ --fqdn'


ขอบคุณ !!! ขออภัยถ้าฉันถามสิ่งนี้ แต่ฉันจะหา FQDN ของฉันได้อย่างไร
RadiantHex

1
สิ่งนี้ย่อมาจาก 'ชื่อโดเมนที่ผ่านการรับรองอย่างสมบูรณ์' superuser.comคือ FQDN หากคุณเป็นเจ้าของโดเมนคุณสามารถใช้งานได้มิฉะนั้นคุณสามารถทำบางสิ่งได้หากคุณอยู่ในเครือข่ายภายใน
Mudfly

1
ขอบคุณ @Mudfly! ฉันลองคำแนะนำของคุณแล้วคำสั่งสุดท้ายจะส่งกลับ "ชื่อโฮสต์: ชื่อหรือบริการที่ไม่รู้จัก" อีกครั้ง!
RadiantHex

หากไม่มีข้อมูลเพิ่มเติมมันยากที่จะทราบเงื่อนไขของปัญหาของคุณ EG: นี่คือการติดตั้งในพื้นที่คุณเข้าสู่ระบบด้วย ssh คุณใช้บัญชีผู้ใช้หรือเข้าสู่ระบบในรากหรือไม่ คุณอาจต้องการเยี่ยมชมubuntuforums.orgและค้นหาผู้อื่นที่ได้แก้ไขปัญหาที่คล้ายกัน
Mudfly

1
นี่เป็นการกระโดดอย่างรวดเร็วที่นี่ แต่อูบุนตูใช้ sudo แทนการใช้รูท ค่อนข้างเป็นไปได้ว่าเชลล์ไม่ได้ติดตั้งอย่างถูกต้อง เพื่อทดสอบนี้ง่ายมาก ก่อนอื่นคุณสามารถทำ 'ls -al / root /' และดูว่าคุณสามารถดู. bashrc วินาทีได้หรือไม่หากคุณไม่มี. bashrc ให้คัดลอกจาก skel 'cp /etc/skel/.bashrc ./' ที่คุณสามารถทำได้ แม้ว่าคุณจะมีไฟล์อยู่แล้ว ประการที่สามทำ '/ bin / bash' เพื่อให้แน่ใจว่าคุณใช้ bash ในที่สุดลองคำสั่งดั้งเดิมของคุณอีกครั้งคุณควรจะทำงานใน bash shell ที่ตั้งค่าไว้อย่างสมบูรณ์
Mudfly

0

ไม่เหมือนกับการhostnameเรียกใช้คำสั่งแบบง่ายการเรียกใช้hostname --fqdnจะพยายามทำบางสิ่งเพิ่มเติมซึ่งมักจะส่งผลให้การค้นหา DNS บางอย่าง

ยกตัวอย่างเช่นการเรียกใช้ (สำเร็จ) ดังต่อไปนี้ (นี่คือจากกล่อง Red Hat แต่ฉันคิดว่ามันควรจะเหมือนกันสำหรับ Ubuntu):

# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com

หมายเหตุ--verboseตัวเลือกที่มีประโยชน์มาก

ในระยะสั้นสิ่งอื่น ๆ ที่เรียบง่ายhostnameอาจทำมากกว่าที่คุณคาดหวัง นี่เป็นอีกตัวอย่าง:

# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3

และเพื่อปัดเศษ:

# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com

โปรดทราบว่าชื่อโฮสต์ของระบบ (ตามที่ส่งคืนโดย gethostname) ฉันสามารถใช้ชื่อโฮสต์ที่ไม่มีเงื่อนไขเช่น 'myserver' นี่คือสาเหตุที่โปรแกรมที่คุณต้องการติดตั้งใช้งานhostname --fqdnแทน

ข้อความแสดงข้อผิดพลาดhostname: Name or service not knownมาจากฟังก์ชั่นตัวแก้ไข : สิ่งเหล่านี้เป็นส่วนของไลบรารีระบบที่แปลระหว่างชื่อและที่อยู่ (โดยทั่วไปคือชื่อ DNS และที่อยู่ IP)

ที่จริงแล้วตัวแก้ไขทำมากกว่า DNS (และมากกว่าแค่การแปลระหว่างชื่อโฮสต์และที่อยู่ IP) พฤติกรรมของมันได้รับการกำหนดค่าบางส่วนโดยไฟล์/etc/nsswitch.confและโดยทั่วไปแล้วจะพิจารณาสิ่งต่อไปนี้ตามลำดับนี้:

  • 'hosts' (บน Linux หมายถึง / etc / hosts)
  • (บางครั้ง) nscd (daemon การแคชบริการชื่อ)
  • 'DNS'

(โปรดทราบว่าคุณสามารถมีเซิร์ฟเวอร์แคช DNS เช่น dnsmasqd --- สำหรับจุดด้านบนซึ่งยังคงอยู่ภายใต้กลไก 'dns')

เป็นมูลค่าการชี้ให้เห็นว่าเครื่องมือเช่นขุด , เจ้าภาพและเป็นที่เคารพnslookupไม่ปฏิบัติตามคำสั่งนี้; เป็นเครื่องมือสืบค้น DNS อย่างชัดเจน ซึ่งหมายความว่าหากคุณพึ่งพาพวกเขา (ในสคริปต์) คุณอาจท้ายได้รับผลลัพธ์ที่แตกต่างจากสิ่งที่โปรแกรมไคลเอนต์ปกติจะ (ที่ใช้ตัวแก้ไขระบบ) ด้วยเหตุผลนี้ให้ใช้โปรแกรมgetentในสคริปต์โดยเฉพาะถ้าคุณมีส่วนประกอบแคชเช่นการเรียกใช้ nscd

# getent hosts myserver.example.com
10.1.2.3    myserver.example.com

ดังนั้นสิ่งที่สำคัญสำหรับที่นี่คือ a) หากคุณมี / etc / hosts กำหนดค่าอย่างดีกับรายการสำหรับเครื่องของคุณเองและ b) /etc/nsswitch.conf ของคุณมีการกำหนดค่าตามปกติ - hosts: files dnsตามลำดับนั้น c) แม้ หากคุณไม่มี DNS ที่กำหนดค่าอย่างดีในสภาพแวดล้อมของคุณคุณhostname --fqdnควรใช้งานได้

ใน DNS ที่กำหนดค่าอย่างดีคุณจะต้องมีที่อยู่ 'reverse' หนึ่งรายการ ("PTR record") ที่ให้ชื่อ 'canonical' ของเซิร์ฟเวอร์ของคุณและชื่อนั้นควรจะสามารถค้นหาได้ (เช่น " บันทึก "สำหรับ IPv4)

เวอร์ชั่นสั้น: เพิ่ม--verbose; มันจะชี้ให้คุณสิ่งที่คุณขาด

หวังว่าจะช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้น

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