简介
hostnamectl 命令中的 “hostname” 顾名思义,指的是计算机在网络上的名称,“ctl” 是 “control” 的缩写,意味着控制。hostnamectl 命令用于查询和修改系统主机名以及相关的设置。它通过与 systemd 系统管理器交互,允许用户以简单的方式管理主机名,而无需直接编辑配置文件。主机名在网络中用于标识设备,方便用户和服务进行通信和识别。
使用方式
hostnamectl [OPTIONS...] {COMMAND}
常用选项
-
--no-ask-password
:执行需要管理权限的操作时,不再提示用户输入密码认证。 -
--static, --transient, --pretty
:当用status
命令(或未指定具体命令)时,如果指定了其中某个选项,hostnamectl
会只显示对应种类的主机名。如果将它们与
set-hostname
命令一起使用,则只会更新选中的相应主机名。如果同时使用多个(>1)此类选项,则所有指定的主机名类型都会被更新。 -
-H, --host=
:使用该选项可以远程执行操作。通过指定要连接的主机名,或者采用 “用户名@主机名” 的格式进行远程主机的连接。主机名后可以附加SSH
监听端口号,用冒号分隔;若后面再跟上容器名(以斜杠/
分隔),则直接连接到指定主机上的某个容器。此处使用SSH
建立通信。如果要列出容器名,可以使用machinectl -H HOST
。若是IPv6
地址,需要用[]
括起来。 -
-M, --machine=
:在本地机器上执行操作。指定一个容器名来进行连接。可以选择在其前面加上用户名和一个@
字符来指定连接用户。如果使用特殊字符串.host
代替容器名称,则会建立与本地系统的连接(这对于连接到特定用户的用户总线很有用:--user --machine=lennart@.host
)。 如果未使用@
,则以 root 用户身份建立连接。 如果使用@
,则可以省略左侧或右侧(但不能同时省略),在这种情况下,将假定为本地用户名和.host
。 -
-h, --help
:显示帮助信息。 -
--version
:显示版本信息。 -
--json=MODE
:以JSON
格式输出信息。MODE
为short
、pretty
和off
,分别表示尽可能简短的输出,不包含任何冗余的空格或换行符、美观的格式化版本,带有缩进和换行符以及关闭JSON
输出(默认)。
命令
-
status
: 显示系统主机名和相关信息。 如果没有指定命令,则默认执行此命令。 -
hostname [NAME]
:如果没有提供参数,则显示系统主机名。 如果提供可选参数NAME
,则将系统主机名更改为NAME
。默认情况下,这将同时更改pretty hostname
、static hostname
和transient hostname
;但是,如果使用了一个或多个--static
、--transient
、--pretty
中的选项,则只会更改选定的主机名。如果要设置
pretty hostname
,并且同时设置static
或transient hostname
,则在更新后者之前,将简化指定的主机名,使其符合所使用的字符集。 这是通过删除特殊字符和空格来完成的。 这确保了pretty hostname
和static hostname
始终紧密相关,同时仍然遵循特定名称的有效性规则。如果仅设置transient
和/或static hostname
,而未涉及pretty hostname
,则不会简化主机名字符串。static hostname
和transient hostname
必须分别是单个 DNS 标签(一个由 7 位 ASCII 小写字符组成的字符串,没有空格或点,限制为 DNS 域名标签允许的格式),或者是由单个点分隔的此类标签序列,形成有效的完整域名。 主机名最多只能有 64 个字符,这是 Linux 限制(DNS 允许更长的名称)。 -
icon-name [NAME]
:如果不带参数,则显示系统的图标名称。如果提供可选参数NAME
,则将图标名称更改为NAME
。图标名称供某些图形应用程序用于可视化显示此主机。 -
chassis [TYPE]
:如果不带参数,则显示机箱类型。 如果提供可选参数TYPE
,则将机箱类型更改为TYPE
。机箱类型供某些图形应用程序用于可视化主机或更改用户交互。当前,定义了以下机箱类型:desktop
(台式机)、laptop
(笔记本电脑)、convertible
(二合一电脑)、server
(服务器)、tablet
(平板电脑)、handset
(手机)、watch
(手表)、embedded
(嵌入式)。 此外,还有特殊的机箱类型vm
(虚拟机)和container
(容器),用于缺乏物理机箱的虚拟化系统。 -
deployment [ENVIRONMENT]
:如果不带参数,则显示部署环境。 如果提供可选参数ENVIRONMENT
,则将部署环境更改为ENVIRONMENT
。ENVIRONMENT
必须是一个不包含任何控制字符的单词。 建议使用以下值之一:development
(开发)、integration
(集成)、staging
(预发布)、production
(生产)。 -
location [LOCATION]
:如果不带参数,则显示系统的位置字符串。 如果提供可选参数LOCATION
,则将系统的位置字符串更改为LOCATION
。LOCATION
应该是一个人类友好的、自由格式的字符串,用于描述系统的物理位置(如果已知且适用)。 它可以像Berlin, Germany
(德国,柏林)这样通用,也可以像Left Rack, 2nd Shelf
(左侧机架,第二层)这样具体。
返回值
成功执行返回 0
,失败返回一个非零错误码。
参考示例
显示当前的主机信息
hostnamectl status
使用 status 命令可以显示系统主机名及相关信息:
jay@jaylinuxlenovo:~/test$ hostnamectl statusStatic hostname: jay-homeIcon name: computer-laptopChassis: laptopDeployment: aMachine ID: 8e0c9a****************9024baeb91Boot ID: 2b0874****************661a844b6d
Operating System: Ubuntu 22.04.5 LTS Kernel: Linux 5.15.0-131-genericArchitecture: x86-64Hardware Vendor: LenovoHardware Model: Lenovo G50-80
只查看系统主机名
hostnamectl hostname
使用 hostname
不加参数可以单独查看主机名这一项:
jay@jaylinuxlenovo:~/test$ hostnamectl hostname
jay-home
设置系统主机名
hostnamectl hostname new-hostname
使用 hostname
加参数可以将主机名设置成指定参数中的名称,注意该操作会需要权限:
jay@jaylinuxlenovo:~/test$ hostnamectl hostname new-hostname
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ===
Authentication is required to set the statically configured local hostname, as well as the pretty hostname.
Authenticating as: jay
Password:
==== AUTHENTICATION COMPLETE ===
jay@jaylinuxlenovo:~/test$ hostnamectl hostname
new-hostname
使用 JSON 格式输出主机信息
hostnamectl status --json=pretty
加入 --json
选项就可以将信息以 JSON
格式输出。此处我使用 pretty
模式可以显示得更友好:
jay@jaylinuxlenovo:~/test$ hostnamectl status --json=pretty
{"Hostname" : "jay-home","StaticHostname" : "jay-home","PrettyHostname" : null,"DefaultHostname" : "localhost","HostnameSource" : "static","IconName" : "computer-laptop","Chassis" : "laptop","Deployment" : "a","Location" : null,"KernelName" : "Linux","KernelRelease" : "5.15.0-131-generic","KernelVersion" : "#141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025","OperatingSystemPrettyName" : "Ubuntu 22.04.5 LTS","OperatingSystemCPEName" : null,"OperatingSystemHomeURL" : "https://www.ubuntu.com/","HardwareVendor" : "Lenovo","HardwareModel" : "Lenovo G50-80","ProductUUID" : null
}
注意事项
- 修改主机名通常需要 root 或具有 sudo 权限的用户。
- 在某些系统上,修改主机名后可能需要重启系统或重启网络服务才能使更改完全生效。建议在修改主机名后重启系统。
- hostnamectl 区分的三种不同的主机名分别为
pretty hostname
:一个用户友好的主机名,可以包含各种特殊字符(例如:“Lennart’s Laptop”)、static hostname
:用户配置的主机名(例如:“lennarts-laptop”) 以及transient hostname
:备用值,通常从网络配置中获取(例如:“node12345678”)。 - 如果设置了有效的 static hostname ,则不会使用 transient hostname。
- pretty hostname 对使用的字符和长度几乎没有限制,而 static hostname 和 transient hostname 则限制为通常接受的 Internet 域名字符,并且最大长度为 64 个字符。