重命名服务器或配置新机器时,保持主机名在日志、监控仪表板和网络记录中一致可以避免混乱。在基于 systemd 的 Linux 系统上,hostnamectl 是从命令行读取和设置主机名的标准工具,无需手动编辑 /etc/hostname。
本指南介绍如何使用 hostnamectl 查看和更改主机名及相关系统元数据。
语法
hostnamectl [OPTIONS] COMMAND不带命令调用时,hostnamectl 会显示当前系统状态,等同于运行 hostnamectl status。
检查当前主机名
不带任何参数运行 hostnamectl 可显示完整的主机名状态:
hostnamectl Static hostname: ubuntu-server
Icon name: computer-vm
Chassis: vm
Machine ID: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
Boot ID: f7e8d9c0b1a2f7e8d9c0b1a2f7e8d9c0
Virtualization: kvm
Operating System: Ubuntu 26.04 LTS
Kernel: Linux 6.14.0-14-generic
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC (Q35 + ICH9, 2009)输出显示了静态主机名、机箱类型、机器 ID 和启动 ID、虚拟化平台、操作系统以及内核版本。
要仅打印当前系统主机名,请使用 hostname 命令:
hostnamectl hostname你也可以选择特定的主机名类型:
hostnamectl --static
hostnamectl --transient
hostnamectl --pretty设置静态主机名
静态主机名是管理员配置的名称,存储在 /etc/hostname 中。它会在重启后保持不变。要仅更改此主机名,请运行:
sudo hostnamectl --static hostname web-server-01系统主机名会立即更改,但现有的 shell 提示符可能仍会显示旧名称。打开一个新的终端会话以刷新提示符。
验证静态主机名:
hostnamectl --staticweb-server-01静态和瞬态主机名可以是单个 DNS 标签,例如 web-server-01,也可以是有效的完全限定域名,例如 web-server-01.example.com。Linux 内核将其限制为 64 个字符。
要同时设置静态、瞬态和美观主机名,请省略类型选项:
sudo hostnamectl hostname web-server-01当前的 systemd 版本使用上面显示的 hostname 命令。较旧的版本和许多现有指南使用等效的 set-hostname 形式:
sudo hostnamectl set-hostname web-server-01如果你使用的是较旧的发行版,请检查 hostnamectl --help。
设置美观主机名
美观主机名是一个自由格式、人类可读的标签,可以包含空格和大小写混合。它存储在 /etc/machine-info 中,供桌面环境和某些管理工具使用,而不是由内核或网络使用:
sudo hostnamectl --pretty hostname "Web Server 01"静态主机名和美观主机名是独立的。你可以将它们设置为不同的值:
sudo hostnamectl --static hostname web-server-01
sudo hostnamectl --pretty hostname "Web Server 01 (production)"了解主机名类型
hostnamectl 管理三种不同的主机名类型:
- 静态:管理员配置的主机名,存储在
/etc/hostname中。它会在重启后保持不变。 - 瞬态:运行时回退名称,可能来自网络配置。当未设置有效的静态主机名时使用。
- 美观:存储在
/etc/machine-info中的自由格式标签。供桌面 shell 和某些管理工具使用。不用于网络通信。
仅设置瞬态主机名:
sudo hostnamectl --transient hostname temporary-node设置机箱类型
机箱类型告诉系统工具和桌面环境这台机器是什么类型的硬件。要设置它:
sudo hostnamectl chassis server有效的机箱类型有:desktop、laptop、convertible、server、tablet、handset、watch、embedded、vm 和 container。虚拟机使用 vm,容器环境使用 container。
机箱类型与美观主机名一起存储在 /etc/machine-info 中。
设置部署环境和位置
另外两个字段有助于在较大环境中标识机器:
sudo hostnamectl deployment production
sudo hostnamectl location "rack-3 / datacenter-ams"两者都存储在 /etc/machine-info 中,并会出现在 hostnamectl 输出中。它们对系统行为没有影响,但对于读取机器元数据的库存和监控工具很有用。
管理远程主机或容器
-H 选项通过 SSH 对远程机器运行 hostnamectl。例如,以 admin 用户身份查询服务器:
hostnamectl -H admin@server.example.com status使用 -M 操作本地 systemd 机器或容器:
hostnamectl -M web-container status你的账户仍然需要连接目标并执行请求操作的权限。
主机名与网络配置
更改主机名不会创建或更新 DNS 记录。如果其他系统必须通过新名称访问该机器,请单独更新相关的 DNS 记录。
当 /etc/hosts 包含旧主机名的条目时,你可能还需要更新它。这可以避免期望系统主机名能够解析的工具出现本地名称解析错误。
在云实例上,cloud-init 或提供商元数据可能会在启动期间恢复之前的主机名。如果你的更改无法持久保留,请检查提供商设置以及 /etc/cloud/cloud.cfg 中的 preserve_hostname 选项。
故障排除
hostnamectl: command not found
该命令在基于 systemd 的发行版上可用。在使用其他 init 系统的系统上,请改用 hostname 命令并编辑平台的主机名配置文件。
Could not set property: Access denied
更改主机名或机器元数据需要管理权限。使用 sudo 运行命令,并确认你的账户被允许执行特权操作。
重启后旧主机名恢复
Cloud-init、DHCP 或其他配置服务可能正在重置它。请检查系统的云和网络配置,而不是反复更改主机名。
快速参考
| 任务 | 命令 |
|---|---|
| 显示系统主机名详情 | hostnamectl |
| 打印当前主机名 | hostnamectl hostname |
| 打印静态主机名 | hostnamectl --static |
| 仅设置静态主机名 | sudo hostnamectl --static hostname web-server-01 |
| 设置所有主机名类型 | sudo hostnamectl hostname web-server-01 |
| 设置美观主机名 | sudo hostnamectl --pretty hostname "Web Server 01" |
| 设置瞬态主机名 | sudo hostnamectl --transient hostname temporary-node |
| 设置机箱类型 | sudo hostnamectl chassis server |
| 设置部署环境 | sudo hostnamectl deployment production |
| 查询远程主机 | hostnamectl -H user@host status |