Имя компьютера 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. Я сделал начальную запись, когда я был в офисе, но в моей домашней сети он вернулся к нормальной жизни. Интересно, это как-то связано с моей рабочей сетью?
Трэвис Нельсон

Ответы:

94

Это совершенно нормально, чтобы это произошло; при удаленном входе в систему терминал bash осуществляет обратный поиск DNS. Это будет то же самое, только если имя хоста не указано в сети, к которой вы подключаетесь, и нет ответа от DHCP-сервера, или обратный поиск на удаленном DNS-сервере не удается разрешить.

Вы можете легко переопределить настройку по умолчанию, используя эту команду в Терминале:

# sudo scutil --set HostName archos

Вы можете проверить это с помощью:

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

(где nn обозначает IP-адрес вашего Mac)

l'L'л
источник
6
@Gio Удалите ключ HostName из раздела «Система» из /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 машинах, и идеи, предложенные в ответе Дж. Хувера ниже и в комментарии, написанном 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
Изменяя имя в Системных настройках-> Общий доступ и затем используя scutilдля установки HostName, оба ComputerNameи LocalHostNameуже были установлены для нового имени для меня (в Mavericks). Приятно знать, что эти другие настройки существуют, хотя.
Джим Стюарт
@JimStewart: Действительно, именно поэтому лучше НИКОГДА не устанавливать HostName, потому что это сохранит это значение, даже если вы позже попытаетесь изменить имя хоста через Системные настройки . С другой стороны , LocalHostName есть подобрано оболочка и hostname, поэтому HostNameникогда не нужно.
mklement0
В моем случае у меня было неправильное значение LocalHostName. Запуск sudo scutil --set LocalHostName ''удаленного LocalHostName, и теперь моя подсказка использует ComputerName, который имеет правильное значение.
отметьте
14

Существует две потенциальные причины, по которым оболочка ( $HOSTNAMEпеременная, '\h'in $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-адресу вашего компьютера, будет указано имя этой записи.

Только если ни одно из вышеперечисленного не соответствует действительности, оболочка будет hostnameотображать значение, заданное в Системных настройках


Если вы хотите изменить имя своего хоста из оболочки , выполните оба следующих действия:

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

где <newFriendlyName>может быть более дружественная версия (пробелы, знаки пунктуации) <newName>(только буквенно-цифровые и тире).

mklement0
источник
к сожалению, просто установить эти два в моем случае оказалось
rogerdpack
@rogerdpack: И ты побежал sudo scutil --set HostName ''первым (дело имеет значение) и убедился, что там нет записи /etc/hosts? scutil --get HostNameдолжен сообщить Hostname: not set.
mklement0
да scutil --get HostName HostName: not set/ etc / hosts кажется доброкачественным ...
rogerdpack
1
@rogerdpack: Глупый вопрос: ваша PS1переменная не имеет жестко заданного имени хоста, а не использует \h, не так ли? Как в стороне: /etc/hostsбольше не консультируется с OSX 10.10 (я обновил свой ответ).
mklement0
2
Красивый. Удаление имени хоста (путем установки его в пустую строку, как вы предложили:) sudo scutil --set HostName '' снова позволяет OS X сопоставить имя компьютера с его IP-адресом (например, теперь это работает ping <computername>).
Брент Фауст
5

Я согласен, что совет Джеффри Гувера был правильным ответом. Очистка кеша DNS и перезагрузка Mac тоже хороший шаг. Это вариант ответа Джеффа Гувера:

sudo -i
Password:

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

exit
user67806
источник
1
Вы пропускаете -: это должно быть --setна работе. Кроме того, как я прокомментировал ответ Джеффа: вероятно, лучше не устанавливать HostName.
mklement0
4

Системные настройки -> Общий доступ -> Имя компьютера -> установить его на что угодно

А затем перезагрузите компьютер. Команды консоли не были необходимы. Работает на OS X 10.10.2

Терри Бу
источник
10.14.6 у меня возникла ситуация, когда Sharing -> Computer Name было установлено так, как я хотел, но hostnameвернул «MacBook-Pro». Я даже изменил это и все еще имел проблему. Я никогда не видел эту проблему раньше. Эти scutilкоманды работали для меня. Мне интересно, где / как вы предполагаете сделать это через интерфейс GUI.
pedz
3

Как упоминалось в отдельном ответе, другой вариант - переопределить приглашение PS1 по умолчанию, например, выполнить следующую строку (или добавить ее в файл ~ / .bash_profile):

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

рефов:

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/

rogerdpack
источник
3

Использовать это

sudo systemsetup -setcomputername $name
Quanlong
источник
2

У меня была проблема, что только сама оболочка ( zshв моем случае) не смогла показать правильное имя компьютера. Просто перезапустив оболочку решил это:

exec /bin/zsh
Магнус Густавссон
источник
2

В дополнение к предыдущему ответу, помните, что вы можете использовать статический адрес в вашем маршрутизаторе. Вы должны ввести статический IP-адрес и MAC-адрес своей сетевой карты, а затем задать имя для него. Имя хоста будет автоматически обновлено до указанного имени. Вот и все.

имя существительное
источник