Linux主机名
在RHEL或CentOS中,有三种定义的主机名:
-
静态的(static)
-
瞬态的(transient)
-
灵活的(pretty)
首次看到RHEL文档,提到有3个主机名时,确实也是觉得很奇怪,还好这些定义对于日常工作中影响不大,仅作为了解即可,后面会根据实际使用环境中与主机名相关的注意项罗列出来。
说起主机名,hostname,这是个命令,基本类-UNIX系统都通用这个命令。下面hostname命令基本描述:
The hostname command displays or temporarily modifies the system's fully qualified host name.
fully qualified host name=fully qualified domain name FQDN (fully qualified domain name,完全限定域名) 例如:desktop2.example.com(全域名是主机名的一种完全表示形式。主机名+域名)
上面的名字,对于我们(中国用户)感觉有点陌生。觉得主机名就是标示该主机的名字,需要这么麻烦吗?那是因为在internet 外网的ipv4地址,老外家里可以上网基本就能分到一个固定的外网地址,通过主机名就可以实现通信了。到了中国,ipv4的外网地址,只有企业或事运营商才有,即使我们所获得的也是动态随机分配的,与个人的电脑无法建立关联关系。
以上介绍,仅让大家了解FQDN这个名词信息而已,也不用深究。
下文中主机名,就指的是完全想定域名主机名。
hostname命令,显示或临时修改主机名。为什么是临时修改?
通过下面的一系列命令实验,查询其结果。
命令hostname更改主机名:
## 系统原始配置(主机名相关)
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
[root@localhost ~]# cat /proc/sys/kernel/hostname
localhost.localdomain
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: d638575158a8499196d8f245cabe00c6
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl --transient
localhost.localdomain
[root@localhost ~]# hostnamectl --pretty
## 使用hostname命令更改主机名
[root@localhost ~]# hostname desktop2.example.com
[root@localhost ~]# hostname
desktop2.example.com
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
[root@localhost ~]# cat /proc/sys/kernel/hostname
desktop2.example.com ##内核主机名改变
[root@localhost ~]# hostnamectl --static
localhost.localdomain
[root@localhost ~]# hostnamectl --transient
desktop2.example.com ##瞬时主机名改变
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# exit
[root@desktop2 ~]# ##重新登录,提示符(主机名)发生变化,也说明修改主机名系统已经可用
[root@desktop2 ~]# reboot
...
...
[root@localhost ~]# ##重启系统后
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
[root@localhost ~]# cat /proc/sys/kernel/hostname
localhost.localdomain
[root@localhost ~]# hostnamectl --static
localhost.localdomain
[root@localhost ~]# hostnamectl --transient
localhost.localdomain
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# ##重启后,一切恢复到更改前localhost.localdomain
## 总结:
## 1、命令hostname修改的主机名,不会自动修改/etc/hostname文件
## 2、内核会自动识别和生效
## 3、系统重启后,会恢复更改前的配置
命令hostnamectl更改static主机名:
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: f3195a3339d342c3b5a7c88d82952766
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl set-hostname desktop2.example.com
[root@localhost ~]# hostnamectl
Static hostname: desktop2.example.com
[root@localhost ~]# hostnamectl --transient
desktop2.example.com
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# hostname
desktop2.example.com
[root@localhost ~]# cat /etc/hostname
desktop2.example.com
[root@localhost ~]# cat /proc/sys/kernel/hostname
desktop2.example.com
[root@desktop2 ~]# ##再次登录提示符改变(主机名)
## 总结:
## 1、命令hostnamectl set-hostname不指定类型(静态/瞬时/灵活),默认会全部修改。
## 也可以直接指定只修改static主机名hostnamectl --static set-hostname desktop2.example.com
## 2、使用命令hostnamectl更改静态主机名,会自动更改/etc/hostname文件
## 3、内核会自动识别并生效新的static主机名
命令hostnamectl更改transient主机名:
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: f3195a3339d342c3b5a7c88d82952766
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl --transient
localhost.localdomain
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# hostnamectl --transient set-hostname desktop3.example.com
[root@localhost ~]# hostnamectl --transient
desktop3.example.com
[root@localhost ~]# hostname
desktop3.example.com
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
[root@localhost ~]# cat /proc/sys/kernel/hostname
desktop3.example.com
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Transient hostname: desktop3.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: f3195a3339d342c3b5a7c88d82952766
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@desktop3 ~]# ## 再次登录后提示符改变(主机名)
[root@desktop3 ~]# reboot
...
...
[root@localhost ~]#
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: 896db1db34e1479992b235da2b6a84a4
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl --transient
localhost.localdomain
## 总结:
## 1、使用命令hostnamectl修改transient主机名,内核会自动感知
## 2、/etc/hostname文件不会更新,也印证此文件存储的是static主机名
## 3、瞬时主机名更改后,系统重启会自动还原到该更改前的主机名。
命令hostnamectl显示解释:
[root@localhost ~]# hostnamectl --transient set-hostname desktop3.example.com
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Transient hostname: desktop3.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: 896db1db34e1479992b235da2b6a84a4
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl --pretty set-hostname server2.example.com
[root@localhost ~]# hostnamectl
Static hostname: localhost.localdomain
Pretty hostname: server2.example.com
Transient hostname: desktop3.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: 896db1db34e1479992b235da2b6a84a4
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl set-hostname desktop2.example.com
[root@localhost ~]# hostnamectl
Static hostname: desktop2.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: 896db1db34e1479992b235da2b6a84a4
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostnamectl --transient
desktop2.example.com
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]#
## 总结:
## 1、单独更改了transient主机名,执行hostnamectl会自动显示(当static与transient不一样时,命令会自动显示)
## 2、更改了pretty主机名后,执行hostnamectl会自动显示
## 3、如果static与transient主机名一致,那么hostnamectl命令只显示static主机名
## 4、命令hostnamectl set-hostname不指定类型(静态/瞬时/灵活),默认会全部修改。
## 可能是vmware虚拟的系统,pretty默认为空,修改后还是空。
修改/etc/hostname文件配置,更改主机名:
## 直接修改/etc/hostname文件
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
[root@localhost ~]# echo "desktop5.example.com" >/etc/hostname
[root@localhost ~]# cat /etc/hostname
desktop5.example.com
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# cat /proc/sys/kernel/hostname
localhost.localdomain
[root@localhost ~]# hostnamectl
Static hostname: desktop5.example.com
Transient hostname: localhost.localdomain
Icon name: computer-vm
Chassis: vm
Machine ID: 75fddfea32b14adebc09019d7d72135a
Boot ID: 896db1db34e1479992b235da2b6a84a4
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.3:GA:server
Kernel: Linux 3.10.0-514.el7.x86_64
Architecture: x86-64
[root@localhost ~]# hostname
desktop5.example.com
[root@localhost ~]# cat /proc/sys/kernel/hostname
desktop5.example.com
[root@desktop5 ~]# ##重新登录,提示符改变(主机名)
## 总结:
## 1、直接修改/etc/hostname内容,内核无法直接识别
## 2、使用hostnamectl会触发读取/etc/hostname文件配置,使其内核识别而生效
## 3、重启后会显示更改后的主机名
注意:静态主机名保存在/etc/hostname文件.以前版本的Red Hat Enterprise Linux作为一个变量保存在/etc/sysconfig/network 文件中。
有关hostname相关总结:
- 有3种不同主机名,命名和作用有所区别,但真正影响系统的是static主机名,其他两种可忽略。
命名规则区别:pretty主机名,可以使用任意字符作为主机名;transient和static主机名都要遵循FQDN命名规则。
作用和影响区别:当系统启动时,内核初始化会使用static主机名;当设定的static主机名有效时,transient主机名不会被使用。 - 更改主机名多种方法,
方法一:命令hostname,临时更改,重启会失效。
方法二:修改/etc/hostname配置,内核不会自动识别,需命令hostnamectl读取,才能生效。
方法三:使用命令hostnamectl修改最简单直接(建议使用方式)
方法四:利用网络工具或命令更改,在此就不再说明。 - 无论哪种方法,都不会自动更新/etc/hosts。仍需手工将主机名和IP进行对应解析。
- 基于以上情况,在确认当前主机名时,不要只使用命令hostname,建议使用命令hostnamectl或是查看/etc/hostname文件配置为准。(否则就是坑)