macOS 修改主机名为什么 sudo hostname 不够
新机器上我执行过:
|
|
但终端里过一段时间又显示成了 Mac,再看系统里的 hostname:
|
|
输出是:
|
|
一开始以为是 shell prompt 缓存,后来发现不是。macOS 里有几套名字,hostname 只改了当前运行时状态,没有把系统里持久化的名字都补齐。
先把几个名字都看一遍
|
|
当时我的结果大概是:
|
|
关键点是 HostName 是空的。ComputerName 和 LocalHostName 已经是 m5,但运行时 hostname 还是被系统或网络环境带成了 Mac.lan。
这几个名字的用途不完全一样:
| 名称 | 用途 |
|---|---|
HostName |
系统主机名,和 hostname 最相关 |
LocalHostName |
Bonjour / .local 发现用的名字 |
ComputerName |
系统设置、Finder、共享里显示的名字 |
所以只执行 sudo hostname m5 不够。它能马上改当前会话里的 hostname,但重启、切网络、DHCP 更新后,还是可能被改回去。
我现在会这样设置
|
|
前三条是持久化配置;sudo hostname m5 是让当前运行时立即生效。后面两条刷新本机缓存和 mDNS。
设置完再确认:
|
|
如果 hostname 显示 m5.lan,一般也可以接受,说明局域网给它补了搜索域。真正要看的是 scutil --get HostName 是否已经是 m5。
还会变回去时查什么
如果三项 scutil 都是 m5,但后面又变成 Mac.lan,我会继续查这几处:
- 路由器或 DHCP 服务里是不是还记着旧名字。
- DNS 反查是不是把当前 IP 指回
Mac.lan。 - 登录脚本、MDM、dotfiles 里有没有重新设置 hostname。
- prompt 是不是没有读
hostname,而是读了别的缓存或变量。
这次的直接原因就是 HostName 没有设置。以后换机器时,与其只跑 sudo hostname,不如把三项 scutil 一起设掉。