linux hostname -f คำสั่งไม่ทำงานบน RHEL


13

ฉันใช้ RHEL 5.7 และhostnameคำสั่งนั้นให้ชื่อโฮสต์ที่ถูกต้องกับฉัน
แต่hostname -sและกลับ:hostname -f Unknown hostทำไม?


distro อะไร ใน Ubuntu 12.04 ระบบทั้ง 3 งานของฉัน
Anthon

คุณใช้ระบบปฏิบัติการอะไร หาก Linux ซึ่งกระจาย? เนื้อหาของ/etc/hostnameคืออะไร?
terdon

1
hostname -fใช้ DNS คุณมีรายการ DNS ย้อนกลับสำหรับ IP ของคุณหรือไม่
Barmar

@terdon ฉันใช้ RHEL5 (เซิร์ฟเวอร์องค์กร linux red hat รุ่น 5.7 (tikanga)) และไม่มีไฟล์ดังกล่าว (/ etc / hostname)
redoc

@Barmar ฉันไม่ได้กำหนดค่า DNS บนโฮสต์ของฉัน ฉันเพิ่มที่อยู่ IP และ fqdn ในไฟล์ hosts (/ etc / hosts) ข้อผิดพลาดนี้เป็นผลมาจากการที่ DNS ไม่ได้ถูกกำหนดค่าหรือไม่
redoc

คำตอบ:


21

(คัดลอกมาจากคำตอบของฉันเกี่ยวกับ SF )

hostnameคำสั่งส่งกลับผลลัพธ์ที่ได้จาก DNS /etc/hostsและ

hostnameเทียบเท่ากับuname -nและเป็น "ชื่อโฮสต์" จริงหรือ "ชื่อโหนด" ของกล่อง อาร์กิวเมนต์
อื่นทั้งหมดhostnameใช้ชื่อโหนดนี้เพื่อค้นหาข้อมูล

ดังนั้นก่อนที่จะไปเพิ่มเติมฉันควรอธิบาย/etc/hostsรูปแบบไฟล์
ฟิลด์แรกนั้นค่อนข้างชัดเจนคือที่อยู่ IP ของชื่อโฮสต์ทั้งหมดในบรรทัดควรแก้ไข ฟิลด์ที่สองคือชื่อโฮสต์หลักสำหรับ IP นั้น ฟิลด์ที่เหลือเป็นนามแฝง

ดังนั้นหากคุณเรียกใช้hostname -fมันจะพยายามแก้ไข IP สำหรับชื่อโหนดของคุณก่อน ขึ้นอยู่กับว่าคุณมีhosts:รายการที่กำหนดค่าใน/etc/nsswitch.confวิธีนี้จะแตกต่างกันไป

  • หากคุณกำหนดค่าให้ใช้ dns จะใช้โดเมนการค้นหาที่กำหนดค่าไว้/etc/resolv.confจนกว่าจะได้รับ IP กลับมาจาก DNS
  • หากคุณกำหนดค่าให้ใช้ไฟล์มันจะค้นหา/etc/hostsเพื่อค้นหาบรรทัดที่ชื่อโฮสต์หลักหรือชื่อแทนเป็นชื่อโหนดปัจจุบันของคุณ ( uname -n) จากนั้นส่งคืนที่อยู่ IP ในบรรทัดนั้น

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

hostname -aจะทำงานกับไฟล์โฮสต์ได้เนื่องจากทำการค้นหาแบบย้อนกลับใน DNS ให้ผลลัพธ์ 1 รายการเท่านั้น ด้วยไฟล์ hosts จะส่งคืน alises ในบรรทัดที่ตรงกัน (ซึ่งเป็นทุกอย่างหลังจากรายการแรกคือชื่อโฮสต์หลัก)

 

ดังนั้นโดยย่อเหตุผลที่เป็นไปได้สำหรับปัญหาของคุณคือคุณไม่มีรายการ/etc/hostsที่มีชื่อโฮสต์ของคุณ ( uname -n)


ตัวอย่าง
ถ้าชื่อโหนดของคุณคือ 'foobar' และคุณมีรายการ/etc/hostsเช่นนี้:

127.0.0.1 foobar.example.com foobar localhost.localdomain localhost

จากนั้นคุณจะได้รับผลลัพธ์คำสั่งต่อไปนี้:

# hostname
foobar
# uname -n
foobar

# hostname -f
foobar.example.com

# hostname -a
foobar localhost.localdomain localhost

คำอธิบายว่ามันคุ้มค่ามากเพียงใด! ฉันมี FQDN ของฉันที่ท้ายบรรทัด 127.0.0.1 ซึ่งมีชื่อโฮสต์หลักเป็นชื่อโฮสต์ท้องถิ่น ฉันเพิ่งลบพวกเขาและออกจาก FQDN เฉพาะในบรรทัดที่มี IP จริงและแก้ไขปัญหาชื่อโฮสต์ -f ที่ส่งคืน localhost
qwertzguy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.