可通过以下命令查看:
$ hostname
host-0-1.can.xxx.network
$ scutil --get HostName
HostName: not set
$ scutil --get LocalHostName
Frankies-MacBook-Pro
$ scutil --get ComputerName
Frankie's MacBook Pro
在 macOS 上可在「系统偏好设置 - 共享」中查看:

细心的同学会发现,关于 HostName 命令行输出与界面上显示的不一样,具体原因下面会介绍。
以 macOS 为例,HostName、LocalHostName、ComputerName 是可以在系统配置文件 /Library/Preferences/SystemConfiguration/preferences.plist 看到的。其中 *.plist 表示属性列表文件,通常用来存储用户设置。
这里我截取了一部分配置,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CurrentSet</key>
<string>/Sets/1B16C032-311E-4EE7-A79F-7058C7340EE8</string>
<key>Model</key>
<string>MacBookPro13,2</string>
<key>System</key>
<dict>
<key>Network</key>
<dict>
<key>HostNames</key>
<dict>
<key>LocalHostName</key>
<string>Frankies-MacBook-Pro</string>
</dict>
</dict>
<key>System</key>
<dict>
<key>ComputerName</key>
<string>Frankie's MacBook Pro</string>
<key>ComputerNameEncoding</key>
<integer>25</integer>
<!-- <key>HostName</key>
<string>如有设置的话,HostName 将会在此展示</string> -->
</dict>
</dict>
<key>__VERSION__</key>
<integer>20191120</integer>
</dict>
</plist>
再回头看通过 scutil 命令输出结果就很容易理解了,它读取的就是此文件的内容罢了。
$ scutil --get HostName
HostName: not set
$ scutil --get LocalHostName
Frankies-MacBook-Pro
$ scutil --get ComputerName
Frankie's MacBook Pro
其中 scutil --get HostName 输出 HostName: not set 就是因为未曾设置过 HostName。
scutil 命令是管理系统配置的工具。
查看、设置配置:
$ scutil --get <pref>
$ scutil --set <pref> <newval>
其中 pref(preference)目前仅支持 ComputerName、LocalHostName、HostName。
查看 DNS 配置信息:
$ scutil --dns
查看代理信息:
$ scutil --proxy
查看网络信息(IPv4/IPv6):
$ scutil --nwi
更详细用法可通过 man scutil 或 scutil -h 查看。
前面,执行 hostname 命令输出结果如下:
$ hostname
host-0-1.can.xxx.network
它看似乎起来与 LocalHostName、HostName 无关?
其实不然,它跟读取顺序有关。以 macOS 为例,其读取顺序如下:
然后我这里的话,是在第三个步骤里得到的。根据反向 DNS 协议,可使用 IP 地址查询到对应的 HostName,这里利用到 nslookup 命令。
假设我的本地 IP 地址为 172.16.0.1(乱写的),反向 DNS 查询结果类似如下:
$ nslookup 172.16.0.1
Server: 172.24.0.2
Address: 172.24.0.2#53
0.1.16.172.in-addr.arpa name = host-0-1.can.xxx.network.
