Mac 修改主机名与本地主机名
mac 修改主机名
系统设置-通用-关于本机-名称


mac 修改主机名(旧版)
“系统偏好设置”,然后点按“共享”。 点按“编辑”,然后输入新的本地主机名。

macOS 其实有三个「主机名」
这是这件事最容易搞混的地方:图形界面里改的和终端里看到的往往不一样,因为 macOS 同时维护三个独立的名字,各自用在不同的场合。
1. ComputerName(电脑名称) — 给人看的显示名,允许中文、空格、Emoji。它出现在:
- AirDrop 里别人看到的设备名
- 隔空播放、随航的设备列表
- 「查找」App 里的设备名
- 时间机器备份的标识
系统设置 → 通用 → 关于本机 → 名称,改的就是这个。
2. LocalHostName(本地主机名) — Bonjour / mDNS 用的名字,也就是 xxx.local 里的 xxx 部分。只允许字母、数字、连字符,不能有空格和中文。局域网里别的设备通过 你的机器名.local 找到你,靠的是这个。
系统设置 → 通用 → 共享 → 最下方「本地主机名」旁的「编辑」,改的是这个。正文第二部分说的就是它。
3. HostName(主机名) — Unix 层面的主机名,也就是 hostname 命令返回的值,以及终端提示符里显示的那个。这个在图形界面里没有入口,只能用命令行改。
平时不改的话,改 ComputerName 时系统会尝试自动同步 LocalHostName(把空格转成连字符、去掉中文),但 HostName 不一定跟着变。这就是「明明改了名字,终端提示符还是老名字」的原因。
用命令行看清当前的三个值
# 电脑名称
scutil --get ComputerName
# 本地主机名(.local 前缀)
scutil --get LocalHostName
# Unix 主机名
scutil --get HostName
scutil --get HostName 如果返回 HostName: not set,说明这个值从来没被显式设置过。这种情况下系统会回退到用 LocalHostName 或者 DHCP 分配的名字,所以终端里看到的名字可能随网络环境变化——换个 Wi-Fi 提示符就变了,这个现象挺常见。
顺便,hostname 命令的输出和 scutil --get HostName 可能不同。hostname 返回的是当前生效的值(可能来自 DHCP),scutil 返回的是静态配置的值。
三个都改的完整命令
要彻底改干净,三个都得设,用 scutil --set:
sudo scutil --set ComputerName "wfly-mbp"
sudo scutil --set LocalHostName "wfly-mbp"
sudo scutil --set HostName "wfly-mbp"
改完刷新一下 DNS 缓存,让局域网里的 .local 解析立刻更新:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
终端提示符不会立刻变,因为 shell 在启动时读了一次主机名。开一个新终端窗口(或者 exec $SHELL)就好了。
命名的注意事项:
- LocalHostName 和 HostName 不要用中文和空格。虽然系统允许你设,但 mDNS 解析会出问题,而且很多命令行工具处理带空格的主机名会出错。
- 不要用下划线。DNS 规范里主机名只允许字母、数字、连字符(RFC 1123),下划线在某些解析器上会被拒。
- 长度控制在 63 字符内,这是 DNS 单个标签的上限。
- ComputerName 可以随意,中文也行,它只是显示名。
为什么要改这个
几个实际场景:
局域网访问自己的机器。改成一个好记的名字之后,同一网段的设备可以直接用 wfly-mbp.local 访问,不用记 IP(IP 是 DHCP 分配的,会变)。比如在 iPad 上访问本机的开发服务器:
http://wfly-mbp.local:5173
这比每次 ifconfig | grep inet 查 IP 再输一串数字方便得多。SSH 也一样:
ssh wfly@wfly-mbp.local
多台机器区分。家里/公司有几台 Mac 时,默认名字都是「XXX的MacBook Pro」,AirDrop 传文件时根本分不清哪个是哪个。
终端提示符的可读性。SSH 连着好几台机器时,提示符上的主机名是你判断「我现在在哪台机器上」的主要依据。名字含糊不清(或者显示成 DHCP 分配的随机名)很容易在错的机器上执行命令。
服务发现和日志。开发环境里跑的服务(Docker、Kubernetes、监控 agent)经常拿主机名做标识。名字混乱会让日志难以归因。
一个容易踩的坑:Wi-Fi 换了名字就变
如果 scutil --get HostName 是 not set,你的主机名会随网络环境变。具体机制是:macOS 从 DHCP 响应里读 hostname 选项,有的话就用它。某些路由器(尤其是运营商光猫)会给客户端下发一个名字,于是你的终端提示符就变成了 192-168-1-100 之类的东西。
显式 scutil --set HostName 之后就不受影响了,这也是为什么建议三个都设,而不是只改图形界面里那两个。
反过来,如果你希望主机名跟随网络(很少见),可以清掉静态设置:
sudo scutil --set HostName ""
相关:改用户名和家目录路径
主机名和用户名是两回事,容易被一起提起但完全独立。用户名(whoami 的输出)和家目录路径(/Users/xxx)改起来麻烦得多,因为大量应用的配置文件里硬编码了家目录的绝对路径。
如果确实需要改,最安全的做法是新建一个账户再把数据迁过去,而不是原地修改。这一点我在另一篇讲更改系统账户名的文章里写过,核心结论是:账户名在装机时就该定好,事后改的代价远大于收益。
主机名则相反,随时改都没有副作用——它不涉及任何文件路径,最多是某些缓存了旧名字的服务需要重启一次。所以名字起得不满意,改就是了。

还没有留言,来发表第一条吧~