วิธีรับชื่อโฮสต์พร้อมกับชื่อโดเมน


18

ใน unix (Solaris) มีคำสั่งใดบ้างที่ส่งคืนชื่อโฮสต์และชื่อโดเมนด้วยกันไหม?

ตัวอย่างเช่น

hostname -> servername
domainname -> us.xyz.com

ฉันต้องการ : servername.us.xyz.com


2
ใช้งานไม่printf "%s" "$(hostname) $(domainname)"ได้?
jasonwryan

ลองใช้ "ชื่อโฮสต์ - f" ที่จะเพียงพอฉันหวังว่า
abhishek kumar srivastava

คำตอบ:


14

สิ่งนี้จะทำงานหากโดเมนของคุณตั้งค่าไว้อย่างถูกต้องใน resolv.conf คุณยังสามารถใช้คำสั่ง domainname ที่คนอื่น ๆ พูดถึงถ้า NIS domainname ของคุณเหมือนกับโดเมน DNS ของคุณ

echo `uname -n`.`awk '/^domain/ {print $2}' /etc/resolv.conf`

13

คำสั่ง

hostname --fqdn (or -f)

อาจทำสิ่งที่คุณต้องการหรือไม่ตั้งแต่ในระบบของฉันฉันได้รับ(none)เมื่อฉันทำงานdomainname


8
ตาม manpage สำหรับhostname(1)ใน Solaris 10 (ใน sun4v) และทุกรุ่นที่เก่ากว่าที่ฉันเคยใช้--fqdnไม่มี --fqdnมันเป็นเพียงแค่พยายามที่จะตั้งชื่อโฮสต์ไป หากคุณเรียกใช้เป็นผู้ไม่ใช้ superuser เพื่อความปลอดภัยจะมีข้อความระบุว่า 'uname: error ในการตั้งชื่อ: ไม่ใช่เจ้าของ' นี้จะเห็นได้ชัด hostnameSolaris โปสเตอร์ไม่ได้ระบุว่าติดตั้งชุดเครื่องมือ GNU หรือไม่
Alexios

5

อันนี้ก็บักฉันมาหลายปีแล้วเหมือนกัน ฉันแค่แก้ไขมันด้วยการพูด

$(hostname).$(domainname)

คุณสามารถกำหนดฟังก์ชันเปลือกหรือนามแฝง:

fqdn () {
    echo $(hostname).$(domainname)
}

4
domainnnameรายงานโดเมน NIS ของคุณจริงถ้าคุณใช้ NIS นี่ไม่จำเป็นต้องเหมือนกับชื่อโดเมน DNS ของคุณ
Magellan

ไม่มันไม่ใช่ แต่เนื่องจากฉันพยายามหลบเลี่ยง / หลีกเลี่ยง NIS เนื่องจากเป็นสมุดหน้าเหลืองฉันไม่เคยรู้เลย :) ดังนั้นเป็นมีวิธีที่เชื่อถือได้ที่จะได้รับชื่อโดเมนถ้า NIS หนึ่งที่แตกต่างกันอย่างไร
Alexios

คุณควรรู้สึกมีความสุขที่ได้หลีกเลี่ยง NIS มันน่ารำคาญ. และแม้แต่ทีมงาน Mozilla Thunderbird ก็ทำให้พลาดเพราะมันขึ้นอยู่กับเอาท์พุท 'domainname' สำหรับการตอบกลับค่าเริ่มต้นใน 2.0 สำหรับชื่อโดเมนที่แท้จริงฉันใช้hostname --fqdn | cut -d. -f2-4
Magellan

1
มันทำงานได้ดีบน Linux บน Solaris อย่างน้อย 10 ขึ้นไปให้hostname --fqdn ตั้งชื่อโฮสต์เป็น '--fqdn' ซึ่งอาจเป็นแนวคิดที่ไม่ดี (ดังนั้นอย่าลืมรูทหากคุณลอง) :) --fqdnรองรับ Solaris 11 หรือไม่
Alexios

1
Oy! การตั้งค่าชื่อโฮสต์โดยไม่ตั้งใจอาจทำให้เกิดความเจ็บปวดและ OP บอกว่า Solaris ขอบคุณ!
Magellan

4

ตรวจสอบชื่อโฮสต์ | awk '{พิมพ์ $ NF}'


2
โปรดอธิบายเล็กน้อยสำหรับผู้ที่ไม่ใช่ผู้เชี่ยวชาญ
vonbrand

เรื่องย่อ / usr / sbin / check-hostname คำอธิบายสคริปต์ check-hostname เป็นตัวช่วยการย้ายข้อมูลสำหรับ sendmail (1M) สคริปต์นี้พยายามกำหนดชื่อโฮสต์แบบเต็ม (FQHN) ของโลคัลโฮสต์ในลักษณะคล้ายกับ sendmail (1M) ถ้าชื่อโฮสต์สามารถตรวจสอบ FQHN ของโฮสต์ท้องถิ่นมันรายงานความสำเร็จ มิฉะนั้นชื่อโฮสต์ตรวจสอบจะรายงานวิธีกำหนดค่าระบบใหม่เพื่อให้สามารถกำหนด FQHN ได้อย่างถูกต้อง
ealgumby

/ usr / sbin / check-hostname จะรายงาน FQDN หากมีการกำหนดไว้ในระบบ Solaris การส่งออกไปยัง awk ไปป์และใช้การพิมพ์ $ NF เพียงแค่รายงานฟิลด์สุดท้ายของเอาต์พุตจาก check-hostname ซึ่งเป็น FQDN นี่เป็นวิธีที่ตรงที่สุดที่ฉันทราบเพื่อรับข้อมูลนี้จากบรรทัดคำสั่งโดยสมมติว่าคุณมีชื่อโดเมนแบบเต็ม ถ้าไม่เช่นนั้นจะไม่สามารถใช้งานได้ แต่ฉันไม่รู้สึกว่าจำเป็นต้องแสดงให้เห็นเช่นเดียวกับในกรณีที่ชื่อโฮสต์เป็นสิ่งที่คุณมี หากคุณไม่ได้ใช้โซลาริสสิ่งนี้จะไม่ทำงานเช่นกัน แต่เคียวรีนั้นถูกส่งไปยังโซลาริส
ealgumby

อย่างจริงจังฉันไม่เข้าใจว่าสิ่งนี้ไม่ตอบคำถามซึ่งก็คือ: "ในยูนิกซ์ (Solaris) มีคำสั่งใดบ้างที่ส่งคืนชื่อโฮสต์และชื่อโดเมนด้วยกัน" คำตอบคือ "ใช่" นั่นคือและคำสั่งนั้นคือ: check-hostname | awk '{พิมพ์ $ NF}'
ealgumby

3
คำตอบที่แท้จริงอยู่ในความคิดเห็นของคุณ การให้คำสั่งแบบบรรทัดเดียวด้วยคำอธิบายเล็ก ๆ น้อย ๆ (หรือในกรณีของคุณไม่มี) ไม่ใช่คำตอบที่เกี่ยวกับเว็บไซต์
rahmu

2

ฉันรู้ว่านี่เป็นเธรดที่เก่ากว่า แต่ฉันต้องการดึงชื่อโฮสต์และชื่อโดเมนแยกต่างหากในสคริปต์

การตอบสนองของ ealgumby ต่อการใช้ชื่อโฮสต์เช็คเป็นสิ่งที่ฉันไม่เคยเห็นมาก่อนดังนั้นฉันจึงพยายามอย่างยิ่งที่จะประสบความสำเร็จตามความต้องการของฉัน ฉันจะทำเครื่องหมายว่าเป็นประโยชน์ แต่เห็นได้ชัดว่าฉันไม่มีตัวแทนให้ทำ

ฉันตั้งค่าโดเมนดังนี้วนลูปผ่านเอาท์พุทจากชื่อโฮสต์ตรวจสอบ

domain=`check-hostname | nawk -F\. '{for(i=2; i<NF;i++){printf $i"."}printf $NF"\n"}'`
fqdn=`hostname`'.'${domain}

1

ฉันได้แก้ไขปัญหาเล็กน้อยhostnameแล้วและhost:

$ host $(hostname -i) | awk '{print $NF }'

(ฉันใช้ Centos แต่ควรทำงานที่อื่น)

รับโดเมนโดยไม่ต้องจุดต่อท้าย:

$ host $(hostname -i) | awk '{print substr($NF, 1, length($NF)-1)}'

บน Ubuntu ของฉันhostname -iพิมพ์ที่อยู่ IP ที่สอดคล้องกับชื่อโฮสต์
Archemar

ใช่ถูกต้องฉันเลยส่งไอพีนี้ไปยังhost คำสั่ง สิ่งนี้จะทำให้คุณได้สิ่งนี้: YOUR_IP.in-addr.arpa domain name pointer hostname.domainname. กับ awk ฉันได้คอลัมน์สุดท้ายนั่นคือhostname.domainname
user1314742

ฉันเห็นว่าน่าเสียดายที่ใช้host $(hostname -i)ชื่อโฮสต์ 8 รายการทั้งหมดที่มี IP เดียวกันและไม่มีชื่อโฮสต์ที่ตรงกับโฮสต์ของฉัน
Archemar

คุณแน่ใจหรือว่าคุณไม่มีนามแฝงใด ๆ สำหรับhostคำสั่ง? ดูเหมือนว่าคำสั่งของคุณhostจะมีนามแฝงต่อhost -a
user1314742

0

บน Solaris มันใช้งานได้ดีสำหรับฉัน: ขอโทษสำหรับ backtick มันเป็นคำพูดที่ตรงกันข้ามกับหมายเลข 1 บนคีย์บอร์ดแบบ qwerty หรือคุณสามารถใช้ $ (command) ใน KSH

getent hosts (backtick) /usr/bin/hostname (backtick)

หรือ

getent hosts $(/usr/bin/hostname)

ตัวอย่าง:

root@melauto:[/]# getent hosts $(/usr/bin/hostname)

10.4.19.241     melauto.sro.vic.gov.au melauto loghost
root@melauto:[/]# 

getent queries กลไกค้นหาชื่อปัจจุบันตามที่ระบุใน /etc/nsswitch.conf /etc/hostsและส่งกลับข้อมูลที่ตรงกับการค้นหาที่นี่ก็จะส่งกลับข้อมูลที่พบใน หากคุณค้นหาข้อมูลโฮสต์สำหรับโฮสต์อื่นที่ไม่ได้อยู่ใน/etc/hostsนั้นจะค้นหาใน DNS ที่ระบุว่าเป็นสิ่งที่กำหนดไว้/etc/nsswitch.conf


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