修改 Linux 主機名需同步三個位置,重啟後永久生效。適用 RHEL/CentOS 7/8、Ubuntu 18.04+ (systemd 系統)。
hostnamectl set-hostname new-hostname
# 驗證
hostnamectl status
# 或
hostname
此命令同時更新/etc/hostname並通知 systemd-hostnamed 服務,當前 Shell 需重新登入或執行bash才會在提示字元顯示新名稱。
cat /etc/hostname
# 應只包含新主機名 (無域名),如:new-hostname
vim /etc/hosts
# 將 127.0.0.1 及 ::1 後的舊主機名替換為新主機名
127.0.0.1 localhost localhost.localdomain new-hostname
::1 localhost localhost.localdomain new-hostname
關鍵:許多服務 (Postfix、MySQL、Hadoop、K8s) 啟動時會解析本機主機名,/etc/hosts 缺少對應會導致啟動失敗或效能下降。
reboot
# 重啟後
hostname
hostnamectl
cat /etc/hostname
cat /etc/hosts
ping -c 2 $(hostname) # 應解析至 127.0.0.1
# 1. 修改 /etc/sysconfig/network
HOSTNAME=new-hostname
# 2. 修改 /etc/hosts (同上)
# 3. 臨時生效
hostname new-hostname
# 4. 重啟 network 服務或重啟主機
service network restart
hostnamectl set-hostname 只接受短名;完整 FQDN 需在 /etc/hosts 映射。/etc/cloud/cloud.cfg 中 preserve_hostname: true 防止重開機被覆蓋。