弄清楚 HostName、LocalHostName、ComputerName 之间的区别

发布于 2023-05-05 21:15:58 字数 4528 浏览 73 评论 0

配图源自 Freepik

一、简介

  • 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 为例,HostNameLocalHostNameComputerName 是可以在系统配置文件 /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)目前仅支持 ComputerNameLocalHostNameHostName

查看 DNS 配置信息:

$ scutil --dns

查看代理信息:

$ scutil --proxy

查看网络信息(IPv4/IPv6):

$ scutil --nwi

更详细用法可通过 man scutilscutil -h 查看。

三、读取 hostname

前面,执行 hostname 命令输出结果如下:

$ hostname
host-0-1.can.xxx.network

它看似乎起来与 LocalHostNameHostName 无关?

其实不然,它跟读取顺序有关。以 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

落花浅忆

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

懂王

文章 0 评论 0

清秋悲枫

文章 0 评论 0

niceone-tech

文章 0 评论 0

小伙你站住

文章 0 评论 0

刘涛

文章 0 评论 0

南街九尾狐

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文