OS X计算机名称与终端上显示的内容不匹配


119

我在“系统偏好设置”>“共享”中的计算机名称设置为“ archos”,但在终端上显示为“ iphone”。在我加载Xcode进行iPhone开发之后,它才开始这样做。

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

任何想法可能是什么原因造成的?


你当你输入echo $ HOSTNAME你会得到什么
丹尼尔

1
这很奇怪...我收到回显$ HOSTNAME的“ archos.local”。我在办公室时进行了初始写入,但是在家庭网络中,它已恢复正常。我想知道这是否与我的工作网络有关?
特拉维斯·纳尔逊

Answers:


94

发生这种情况是完全正常的。当您远程登录Terminal时,bash会进行反向DNS查找。如果在您要连接的网络上未指定主机名并且DHCP服务器没有答复,或者对远程DNS服务器的反向查找无法解决,则该名称将是相同的。

您可以在终端中使用以下命令轻松地覆盖默认设置:

# sudo scutil --set HostName archos

您可以使用以下方法进行检查:

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

(其中nn表示您的Mac的IP地址)


6
@Gio从/Library/Preferences/SystemConfiguration/preferences.plist中的System下删除HostName项。看到这个答案
Lri

2
@Gio:@Lauri的帖子具有出色的背景信息,但是如果您想要快捷方式:删除,请运行sudo scutil --set HostName ''
mklement0 2014年

3
HostName建议不要设置,因为它会创建一个单独的值,即使您以后尝试通过更改主机名,该值也将保留下来System Preferences > Sharing。相比之下,设置会LocalHostName更新相同的值,并且通常也会由shell和hostname(该ComputerName值应同时更新)获取。还是设置HostName方式在这里是有利的?
mklement0 2014年

1
另一个测试主机名的方法是hostname -f
ericn

2
我在两台机器上遇到了这个困难,下面的J.Hoover的答案以及上面的mklement0的评论中提出的想法都行不通。即,您俩都建议仅更改LocalHostName和ComputerName,但是,更改它们永远不会更改终端以反映系统首选项中指定的计算机名。我认为在我的情况下,这是因为两台计算机都是Time Machine备份,并且尽管我稍后重命名,但它们保留了旧映像中的本地存储凭据。只有HostName为我工作。仅供参考。
oemb1905

45

您可能还想使用scutil命令更改其他一些内容:

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

2
通过在“系统偏好设置”->“共享”中更改名称,然后使用scutilset HostName,将ComputerNameLocalHostName都设置为我的新名称(在Mavericks中)。很高兴知道这些其他设置是否存在。
Jim Stewart

@JimStewart:的确,这就是为什么最好不要设置它HostName,因为这样做会使该值保持不变,即使您以后尝试通过System Preferences更改主机名时也是如此。反之,LocalHostName 就是拿起用壳hostname,所以HostName永远不会需要。
mklement0 2014年

就我而言,我的LocalHostName值不正确。运行sudo scutil --set LocalHostName ''已删除的LocalHostName,现在我的提示是使用ComputerName,它具有正确的值。
标记

14

有用于壳(两个潜在原因$HOSTNAME变量,'\h'$PS1)和hostname报告,从所示的一个不同的主机名效用System Preferences > Sharing

  • sudo scutil --set HostName newName用于永久更改主机名-不幸的是,此值与“ 系统偏好设置”在幕后设置的值无关LocalHostName - 即使man hostname建议使用此方法,也不要出于此原因使用它运行sudo scutil --set HostName ''以将其删除,此时LocalHostName应再次报告;有关背景,请参阅@Lauri Ranta的这篇文章

  • [ 更新:下面不再是真实的OSX 10.10 ]如果你的/etc/hosts文件有你的机器的IP地址相匹配的条目,将报告的条目名称。

仅当以上两个都不成立时,shell才会hostname反映通过系统偏好设置设置的值。


如果要从shell更改主机名,请运行以下两项

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

其中<newFriendlyName>可以是更友好的版本(空格,标点符号)<newName>(仅字母数字和破折号)。


不幸的是,就我而言,仅设置这两个似乎还不够:gist.github.com/rdp/71d5368087b94b5ea55a
rogerdpack 2014年

@rogerdpack:并且您sudo scutil --set HostName ''首先运行(案例),并确保其中没有条目/etc/hostsscutil --get HostName应该报告Hostname: not set
mklement0 2014年

是的,scutil --get HostName HostName: not set/ etc / hosts看起来
不错

1
@rogerdpack:愚蠢的问题:您的PS1变量不是使用硬编码的主机名,而不是使用\h,不是吗?顺便说一句:/etc/hosts不再参与协商OSX 10.10(我已经更新了我的答案)。
mklement0 2014年

2
美丽。sudo scutil --set HostName '' 再次删除主机名(通过按建议的方式将其设置为空字符串)可以使OS X将计算机名映射到其IP地址(例如,现在可以使用ping <computername>)。
布伦特浮士德2015年


5

我同意杰弗里·胡佛的秘诀是正确的答案。刷新DNS缓存并重新启动Mac也是一个不错的步骤。这是Jeff Hoover的回复的变体:

sudo -i
Password:

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

exit

1
您缺少一个-:必须--set工作。另外,正如我在Jeff的回答中所评论的那样:最好不要设置HostName
mklement0 2014年

4

系统偏好设置->共享->计算机名称->设置为任何

然后重新启动计算机。无需控制台命令。适用于OS X 10.10.2


在10.14.6上,我遇到了一种情况,即按我希望的方式设置了“共享”->“计算机名称hostname” ,但返回了“ MacBook-Pro”。我什至更改了它,仍然有问题。我以前从未见过这个问题。这些scutil命令对我有用。我想知道您应该在哪里/如何通过GUI界面执行此操作。
pedz


3

用这个

sudo systemsetup -setcomputername $name

2

我有一个问题,只有外壳本身(zsh以我为例)无法显示正确的计算机名称。只需重启外壳即可解决:

exec /bin/zsh

2

除了前面的答案外,请记住,您可以在路由器中使用静态地址。您必须输入网卡的静态IP和MAC地址,然后为其设置一个名称。主机名将自动更新为指定的名称。而已。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.