弄清楚 HostName、LocalHostName、ComputerName 之间的区别
一、简介
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论