hostnamectl set-hostname 是 systemd 系统修改主机名的标准方法,同步更新配置、内核及服务;需手动更新 /etc/hosts 并重启终端生效。

用 hostnamectl set-hostname 修改主机名是 systemd 系统(Ubuntu 16.04+、CentOS 7+、Debian 9+)的标准做法,它不只是改个文件,而是同步完成配置写入、内核加载和服务通知三件事。
执行命令并验证基础生效
以 root 或 sudo 权限运行:
-
sudo hostnamectl set-hostname web-prod-01(把
web-prod-01换成你要设的主机名) - 检查是否写入配置:cat /etc/hostname 应输出单行、无空格、无多余字符的主机名
- 确认内核已识别:hostnamectl status | grep "Static hostname" 输出必须与你设置的完全一致
必须手动更新 /etc/hosts
hostnamectl 不碰 /etc/hosts,但很多服务(如 sudo、sshd、zabbix-agent)依赖它做本地解析。不改会导致卡顿或报错 “Could not resolve hostname”。
- 编辑:sudo nano /etc/hosts
- 找到含旧主机名的行,常见格式有:
●127.0.1.1 old-hostname(Debian/Ubuntu 默认)
●127.0.0.1 old-hostname(RHEL/CentOS 常见) - 把整段旧主机名替换成新主机名,例如改为:
127.0.1.1 web-prod-01 - 保留原
127.0.0.1 localhost和::1 localhost行不变
旧系统额外注意点
如果你用的是 CentOS 6 或更早的 SysVinit 系统,仅靠 hostnamectl 或改 /etc/hostname 不够:
- 还需编辑 /etc/sysconfig/network,确保包含:
HOSTNAME=web-prod-01 - 同时确认该文件中
NETWORKING=yes已启用 - 否则重启后主机名会回退到这个文件里写的值
让终端提示符等立即显示新名
改完后当前 shell 可能还显示旧名,这是正常现象:
- 新开一个终端窗口,或运行:exec bash
- 也可以临时刷新:su - $USER
- 验证最终效果:hostname 和 hostname -f 都应返回新主机名











