一、简介
ComputerName
- 电脑名称。LocalHostName
- 本地主机名。HostName
- 主机名。
可通过以下命令查看:
$ 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 命令行输出与界面上显示的不一样,具体原因下面会介绍。
二、scutil 使用
以 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
命令是管理系统配置的工具。
查看、设置配置:
$ 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
命令输出结果如下:
$ hostname
host-0-1.can.xxx.network
它看似乎起来与 LocalHostName
、HostName
无关?
其实不然,它跟读取顺序有关。以 macOS 为例,其读取顺序如下:
- 从
/etc/hosts
文件读取(在 OS X Yosemite 之前为/etc/hostconfig
文件)。- 从系统配置
/Library/Preferences/SystemConfiguration/preferences.plist
读取System ▸ System ▸ HostName
。- 根据本机 IP 地址的反向 DNS 查询获取。
- 从系统配置
/Library/Preferences/SystemConfiguration/preferences.plist
读取System ▸ Network ▸ HostNames ▸ LocalHostName
。- 若以上都无法获取到,则默认为
localhost
。
然后我这里的话,是在第三个步骤里得到的。根据反向 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.
四、hostname 是什么?
未完待续...
网友评论