ชื่อคอมพิวเตอร์ OS X ไม่ตรงกับที่แสดงบนเทอร์มินัล


119

ชื่อคอมพิวเตอร์ของฉันในการตั้งค่าระบบ> การแชร์ถูกตั้งค่าเป็น "archos" แต่แสดงเป็น "iphone" บนเทอร์มินัล มันเพิ่งเริ่มทำสิ่งนี้หลังจากที่ฉันโหลด Xcode เพื่อทำการพัฒนา iPhone

Last login: Mon Nov  7 14:46:55 on ttys001
iphone:~ travis$ 

ความคิดใดที่ทำให้เกิดสิ่งนี้


คุณจะได้อะไรเมื่อคุณพิมพ์ echo $ HOSTNAME
Daniel

1
นี่มันแปลก ๆ ... ฉันได้รับ 'archos.local' สำหรับ echo $ HOSTNAME ฉันเขียนครั้งแรกเมื่อฉันอยู่ที่สำนักงาน แต่ในเครือข่ายภายในบ้านของฉันมันกลับมาเป็นปกติ ฉันสงสัยว่าสิ่งนี้เกี่ยวข้องกับเครือข่ายงานของฉันหรือไม่?
Travis Nelson

คำตอบ:


94

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

คุณสามารถข้ามการตั้งค่าเริ่มต้นได้อย่างง่ายดายโดยใช้คำสั่งนี้ในเทอร์มินัล:

# sudo scutil --set HostName archos

คุณสามารถตรวจสอบได้โดยใช้:

# nslookup nn.nn.nn.nn
( or )
# host nn.nn.nn.nn

(โดยที่ nn แสดงที่อยู่ IP ของ Mac ของคุณ)


6
@Gio ลบคีย์ชื่อโฮสต์ภายใต้ระบบจาก /Library/Preferences/SystemConfiguration/preferences.plist ดูคำตอบนี้
Lri

2
@Gio: @ โพสต์ลอรี่มีข้อมูลพื้นฐานที่ดี แต่ถ้าคุณต้องการทางลัด: sudo scutil --set HostName ''ลบเรียกใช้
mklement0

3
HostNameไม่แนะนำให้ตั้งค่าเนื่องจากจะสร้างค่าแยกต่างหากซึ่งจะยังคงอยู่แม้ว่าคุณจะพยายามเปลี่ยนชื่อโฮสต์ในSystem Preferences > Sharingภายหลัง ในทางกลับกันการตั้งค่าจะLocalHostNameอัปเดตค่าเดียวกันและโดยปกติแล้วจะถูกหยิบขึ้นมาโดยเชลล์และhostname( ComputerNameค่าควรได้รับการอัปเดตควบคู่) หรือการตั้งค่าHostNameทำงานแตกต่างกันไปในทางที่เป็นประโยชน์หรือไม่?
mklement0

1
อีกอันเพื่อทดสอบชื่อโฮสต์คือhostname -f
ericn

2
ฉันมีปัญหากับเครื่อง 2 เครื่องและแนวคิดที่เสนอในคำตอบของ J.Hoover ด้านล่างและในความคิดเห็นโดย mklement0 ด้านบนไม่ทำงาน กล่าวคือคุณทั้งคู่แจ้งว่ามีการเปลี่ยนแปลง LocalHostName และ ComputerName เพียงอย่างเดียวอย่างไรก็ตามการเปลี่ยนสิ่งเหล่านี้ไม่เคยเปลี่ยน Terminal เพื่อให้สะท้อนถึงชื่อคอมพิวเตอร์ที่ระบุใน System Preferences ฉันเชื่อว่าเหตุผลนี้ในกรณีของฉันคือทั้งสองเครื่องเป็นข้อมูลสำรองของ Time Machine และเก็บข้อมูลประจำตัวที่เก็บไว้ในเครื่องจากภาพเก่าแม้ว่าฉันจะเปลี่ยนชื่อในภายหลัง ชื่อโฮสต์เท่านั้นที่ทำงานสำหรับฉัน FYI กับคนอื่น ๆ
oemb1905

45

คุณอาจต้องการเปลี่ยนแปลงสิ่งอื่นโดยใช้คำสั่ง scutil:

sudo scutil --set ComputerName "newname"
sudo scutil --set LocalHostName "newname"
sudo scutil --set HostName "newname"

2
โดยการเปลี่ยนชื่อใน System Preferences-> Sharing แล้วใช้scutilเพื่อ set HostNameทั้งคู่ComputerNameและLocalHostNameถูกตั้งเป็นชื่อใหม่สำหรับฉัน (ใน Mavericks) ยินดีที่ได้ทราบว่ามีการตั้งค่าอื่น ๆ เหล่านี้อยู่
Jim Stewart

@JimStewart: จริง ๆ แล้วมันเป็นเหตุผลที่ดีกว่าที่จะไม่ตั้งค่าHostNameเพราะการทำเช่นนั้นจะทำให้ค่านั้นยังคงอยู่แม้ว่าคุณจะพยายามเปลี่ยนชื่อโฮสต์ของคุณผ่านการตั้งค่าระบบในภายหลัง ในทางกลับกันเชลล์LocalHostName จะถูกหยิบขึ้นมาและhostnameดังนั้นจึงHostNameไม่จำเป็น
mklement0

ในกรณีของฉันฉันมีค่า LocalHostName ไม่ถูกต้อง กำลังเรียกใช้sudo scutil --set LocalHostName ''LocalHostName ที่ถูกลบและตอนนี้พรอมต์ของฉันกำลังใช้ ComputerName ซึ่งมีค่าที่ถูกต้อง
ทำเครื่องหมาย

14

มีสองเหตุผลที่มีศักยภาพสำหรับเปลือก (เป็น$HOSTNAMEตัวแปร'\h'ใน$PS1) และhostnameยูทิลิตี้เพื่อรายงานชื่อโฮสต์ที่แตกต่างจากที่แสดงในSystem Preferences > Sharing:

  • sudo scutil --set HostName newNameใช้เพื่อเปลี่ยนชื่อโฮสต์อย่างต่อเนื่อง แต่น่าเสียดายที่ค่านี้ไม่ขึ้นอยู่LocalHostNameกับค่าที่กำหนดโดยการตั้งค่าระบบเบื้องหลัง - แม้ว่าจะman hostnameแนะนำวิธีนี้อย่าใช้ ITด้วยเหตุผลนั้น วิ่งsudo scutil --set HostName ''เพื่อลบมันที่จุดLocalHostNameควรรายงานอีกครั้ง; สำหรับพื้นหลังให้ดูโพสต์นี้โดย @Lauri Ranta

  • [ ปรับปรุง: ต่อไปนี้เป็นความจริงเป็นของ OSX 10.10 ไม่ ] หาก/etc/hostsไฟล์มีรายการที่ตรงกับที่อยู่ IP ของเครื่องที่ว่าชื่อของรายการจะมีการรายงาน

เฉพาะในกรณีที่ไม่มีข้อใดข้อหนึ่งข้างต้นเป็นจริงเชลล์จะhostnameสะท้อนการตั้งค่าผ่านการตั้งค่าระบบ


หากคุณต้องการเปลี่ยนชื่อโฮสต์จากเชลล์ให้รันทั้งสองอย่างต่อไปนี้:

  • sudo scutil --set LocalHostName <newName>
  • sudo scutil --set ComputerName <newFriendlyName>

โดยที่<newFriendlyName>สามารถเป็นเวอร์ชันที่เป็นมิตร (ช่องว่างเครื่องหมายวรรคตอน) ของ<newName>(ตัวอักษรและตัวเลขและขีดกลางเท่านั้น)


น่าเสียดายที่การตั้งค่าทั้งสองอย่างนี้ดูเหมือนจะไม่เพียงพอในกรณีของฉัน: gist.github.com/rdp/71d5368087b94b5ea55a
rogerdpack

@rogerdpack: และคุณเรียกใช้sudo scutil --set HostName ''ก่อน (กรณีสำคัญ) และทำให้แน่ใจว่าไม่มีรายการ/etc/hostsใช่หรือไม่ ควรรายงานscutil --get HostName Hostname: not set
mklement0

ใช่scutil --get HostName HostName: not set/ etc / ไพร่พลดูเหมือนอ่อนโยน ...
rogerdpack

1
@rogerdpack: คำถามงี่เง่า: PS1ตัวแปรของคุณไม่ได้เกิดขึ้นกับชื่อโฮสต์แบบตายตัวแทนที่จะใช้\hใช่มั้ย ในฐานะที่เป็นกัน: /etc/hostsไม่ได้รับการพิจารณาเป็น OSX 10.10 อีกต่อไป (ฉันได้อัปเดตคำตอบของฉันแล้ว)
mklement0

2
สวย. การลบชื่อโฮสต์ (โดยการตั้งค่าให้เป็นสตริงว่างเปล่าตามที่คุณแนะนำsudo scutil --set HostName '' :) อนุญาตให้ OS X อีกครั้งจับคู่ชื่อคอมพิวเตอร์กับที่อยู่ IP (เช่นตอนนี้ใช้งานได้แล้วping <computername>)
Brent Faust


5

ฉันยอมรับว่าคำแนะนำของ Jeffrey Hoover เป็นคำตอบที่ถูกต้อง การล้างแคช DNS และการรีสตาร์ท Mac เป็นขั้นตอนที่ดีเช่นกัน นี่คือตัวแปรของคำตอบของ Jeff Hoover:

sudo -i
Password:

for n in HostName ComputerName LocalHostName; do
    scutil --set $n new_hostname
done

exit

1
คุณหายไป-: ต้อง--setทำงาน นอกจากนี้ในฐานะที่ผมแสดงความคิดเห็นในคำตอบของเจฟฟ์: HostNameมันอาจจะดีกว่าที่จะไม่ได้ตั้งค่า
mklement0

4

การตั้งค่าระบบ -> การแบ่งปัน -> ชื่อคอมพิวเตอร์ -> ตั้งค่าเป็นอะไรก็ได้

จากนั้นรีสตาร์ทเครื่องคอมพิวเตอร์ ไม่จำเป็นต้องใช้คำสั่งคอนโซล ทำงานได้กับ OS X 10.10.2


ในวันที่ 10.14.6 ฉันมีสถานการณ์ที่การแชร์ -> ชื่อคอมพิวเตอร์ถูกตั้งค่าตามที่ฉันต้องการและhostnameส่งคืน "MacBook-Pro" ฉันเปลี่ยนมันและยังคงมีปัญหา ฉันไม่เคยเห็นปัญหานี้มาก่อน scutilคำสั่งทำงานให้ฉัน ฉันสงสัยว่าคุณควรทำเช่นนั้นผ่านส่วนต่อประสาน GUI อย่างไร
pedz

3

ตามที่กล่าวไว้ในคำตอบที่แยกต่างหากตัวเลือกอื่นคือแทนที่การแจ้งเตือนเริ่มต้น PS1 เช่นการดำเนินการบรรทัดต่อไปนี้ (หรือเพิ่มลงในไฟล์ ~ / .bash_profile ของคุณ):

 $ PS1="$(scutil --get ComputerName):\W \u\\$ "

refs:

https://superuser.com/a/414903/39364

http://www.cnet.com/news/keep-your-command-prompt-host-name-static-in-os-x-and-other-unix-systems/



2

ฉันพบปัญหาที่ตัวเชลล์เอง ( zshในกรณีของฉัน) ไม่สามารถแสดงชื่อคอมพิวเตอร์ที่ถูกต้องได้ เพียงแค่รีสตาร์ทเชลล์แก้ไขมัน:

exec /bin/zsh

2

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

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