概述

日常工作中在安装一些系统时,需要修改hostname,比如安装Hadoop时需要修改主机名,而且主机名不能包含下划线。

实际上,主机名分三种(命令hostnamectl或hostnamectl status可查看三种主机名):

  1. “pretty”主机名,UTF8格式的主机名,这个仅供阅读,长度无限制;
  2. “static”主机名,日常所称的主机名(traditional hostname)。最多为64个字符,仅可包含“.”、“_”、“-”、“a-z”、“A-Z”和“0-9”这些字符,并且不能以“.”打头和结尾,也不能两个“.”连续;
  3. “transient”主机名,内核维护的动态主机名,初始化为“static”主机名,默认为localhost。也为hadoop要求的主机名,它的约束规则同“static”主机名。如果存在“static”主机名,且不是“localhost”,那么将忽略“transient”主机名。“transient”主机名可被DHCP和mDNS修改。

当三种主机名相同时,“hostnamectl status”只会显示“static”主机名,三种主机名的设置方法:

hostnamectl --pretty set-hostname NAME 
				
				
hostnamectl --static set-hostname NAME 
				
				
hostnamectl --transient set-hostname NAME

方法一:临时修改主机名

命令hostname不但可以查看主机名,还可以用它来修改主机名,格式为:hostname <NAME>新主机名。
例如:
将机器的主机名hadoop_10202修改为hadoop10202 ,主机名均带有下划线,因此需要修改,仅将原下划线去掉:

hostname hadoop10202

经过上述修改后,类似于修改环境变量,只临时有效,还需要修改相应的系统配置文件,以永久有效。

这条命令不会更改/etc/hostname文件中的静态主机名(static hostname),它更改的只是临时主机名(transient hostname)。所以重启计算机后会回到旧的主机名。
静态主机名保存在/etc/hostname文件中。

方法二: 永久修改主机名

注意:不同的Linux发行版本,对应的系统配置文件可能不同。有些Linux发行版本对应的可能是/etc/hostname文件,有些如CentOS和RedHat同时有/etc/hostname和/etc/sysconfig/network两个文件,修改/etc/hostname即可。
需要注意:/etc/sysconfig/network的格式和/etc/hostname、/etc/HOSTNAME不同,为:HOSTNAME=主机名
这里以Centos7示例:

vi /etc/HOSTNAME

#原主机名hadoop_10202
#hadoop_10202

#修改为
hadoop10202

修改之后,需要重启网卡,以使修改生效。service network restart 或systemctl restart network

同时需要更新/etc/hosts文件
如果你不更新/etc/hosts文件,那么有的程序,如sudo,不知道如何解析新的主机名。

如果你在更改Linux服务器的主机名,那么新的主机名应该要解析为Linux服务器的公网IP。如果更改个人电脑的主机名,那么新的主机名应该解析为127.0.0.1,或者127.0.1.1。

方法三:hostnamectl

hostnamectl set-hostname <newhostname>

这条命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名。和第二种方法一样,我们也需要更新/etc/hosts文件。这两种方法的本质都是一样的。

三者区别

方法

效果

hostname

当次登录临时有效,新登录或重新登录后无效

hostnamectl

系统重启之前一直有效,重启后无效

/etc/hostname

只有在系统重启后才有效