美文网首页
弄清楚 HostName、LocalHostName、Compu

弄清楚 HostName、LocalHostName、Compu

作者: 越前君 | 来源:发表于2022-08-15 21:53 被阅读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.

四、hostname 是什么?

未完待续...

相关文章

网友评论

      本文标题:弄清楚 HostName、LocalHostName、Compu

      本文链接:https://www.haomeiwen.com/subject/evikgrtx.html