应优先使用hostnamectl命令修改主机名,它自动更新/etc/hostname并刷新内核静态主机名;若不支持systemd,则需手动编辑/etc/hostname并执行hostname -F,同时同步更新/etc/hosts及对应系统配置文件。

如果您在Linux系统中需要更改主机名,但发现修改后重启失效或部分服务无法识别新名称,则可能是由于仅修改了运行时主机名而未同步持久化配置。以下是适用于CentOS和Ubuntu的通用修改方法:
一、使用hostnamectl命令修改
该方法适用于所有基于systemd的现代Linux发行版(如CentOS 7+、Ubuntu 16.04+、Debian 9+等),可自动写入/etc/hostname并刷新内核静态主机名,无需重启即可使多数服务识别新名称。
1、以root权限或sudo执行命令设置新主机名:sudo hostnamectl set-hostname your-new-hostname
2、验证静态主机名是否已更新:hostnamectl status | grep "Static hostname"
3、确认/etc/hostname文件内容已被覆盖为新主机名:cat /etc/hostname
二、手动编辑/etc/hostname文件
此方式兼容所有Linux发行版,包括非systemd环境(如旧版CentOS 6、嵌入式系统),通过直接替换静态定义实现持久化,但需额外触发内核参数更新。
1、使用文本编辑器打开主机名配置文件:sudo nano /etc/hostname
2、删除原有全部内容,仅输入新主机名(不可含空格、下划线或特殊字符,仅限字母、数字与连字符)
3、保存并退出编辑器
4、立即加载新主机名至当前运行时环境:sudo hostname -F /etc/hostname
三、同步更新/etc/hosts文件
/etc/hosts是本地名称解析关键文件,若其中仍保留旧主机名映射,将导致sudo、ssh、zabbix-agent等依赖gethostname()的服务启动失败或日志报错“Could not resolve hostname”。
1、编辑hosts文件:sudo nano /etc/hosts
2、查找包含旧主机名的行,常见格式为:127.0.1.1 old-hostname或127.0.0.1 old-hostname
3、将旧主机名完整替换为新主机名,例如改为:127.0.1.1 your-new-hostname
4、确保保留原始的127.0.0.1 localhost行不变
四、修改/etc/sysconfig/network文件(仅RHEL/CentOS 6及更早SysVinit系统)
在不使用systemd的旧版Red Hat系系统中,/etc/sysconfig/network中的HOSTNAME变量被网络初始化脚本读取,忽略此步骤将导致重启后主机名还原为默认值。
1、编辑网络配置文件:sudo nano /etc/sysconfig/network
2、定位或新增包含HOSTNAME=的行,并设为新主机名:HOSTNAME=your-new-hostname
3、确认该文件中存在且启用:NETWORKING=yes
五、通过sysctl方式临时与永久结合修改
此方法适用于不支持systemd的老版本Linux系统,通过内核参数和配置文件协同完成主机名持久化设置。
1、使用sysctl命令临时修改当前运行时主机名:sudo sysctl kernel.hostname=your-new-hostname
2、将该设置写入/etc/sysctl.conf文件以实现重启后保留:echo 'kernel.hostname=your-new-hostname' | sudo tee -a /etc/sysctl.conf
3、编辑/etc/hosts文件,加入新主机名的本地解析记录:sudo nano /etc/hosts
4、添加或修改如下内容:127.0.0.1 localhost your-new-hostname


















