前言

CentOS一共有三种主机名:

静态主机名(Static hostname)

“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。

“静态”主机名需遵从作为互联网域名同样的字符限制规则

瞬态主机名(Tansient hostname)

“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。

“瞬态”主机名需遵从作为互联网域名同样的字符限制规则

灵活主机名(Pretty hostname)

“灵活”主机名也有人叫做“别名”主机名。
“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户。

修改主机名

PS: 这里只详细介绍静态主机名的修改方法

nmtui

作用:基于curses的tui应用,用于交互式NetworkManager,该命令可以理解为NetworkManagerTextUserInterface

用法:直接输入nmtui命令回车即可进入交互界面

演示:

  • Edit a connection:编辑连接
  • Activate a connection:激活连接
  • Set system hostname:设置主机名

前两个是设置网络相关的,设置主机名选择第三个,弹出对话框如图

修改hostname后,选择OK

继续选择OK返回主界面,再选Quit退出

可以使用hostname命令查看修改结果

[root@master ~]# hostname
KsC7

hostnamectl

作用:控制系统主机名(Control the system hostname)

用法:hostnamectl [OPTIONS...] {COMMAND}

选项:

  • --static 只作用于静态主机名
  • --transient 只作用于瞬态主机名
  • --pretty 只作用于灵活主机名

PS: hostnamectl不仅仅只有以上三个选项,这里只提及与本文相关的选项,下面命令同理。

命令:

  • status 显示当前系统主机名和相关信息
  • set-hostname 设置当前系统主机名

PS: status通常情况下可以省略,也就是说hostnamectlhostnamectl status命令是一样的效果

演示:

查看主机名

[root@master ~]# hostnamectl
   Static hostname: master
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

[root@master ~]# hostnamectl status
   Static hostname: master
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

可以看到加不加status命令输出结果一致,其中Static hostname为静态主机名,当瞬态主机名和灵活主机名与静态主机名相同时,则省略不显示。

修改主机名

[root@master ~]# hostnamectl set-hostname KsC7
[root@master ~]# hostnamectl
   Static hostname: ksc7
   Pretty hostname: KsC7
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

在上述例子中,设置的主机名因为有大小写字母,所以静态主机名自动忽略大小写,造成了灵活主机名与静态主机名不同,所以显示了出来,瞬态主机名与静态主机名相同。

[root@master ~]# hostnamectl set-hostname "Ks C7"
[root@master ~]# hostnamectl
   Static hostname: ksc7
   Pretty hostname: Ks C7
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

上述例子同理,静态及瞬态主机名自动忽略掉了空格。因主机名内有空格,所以需要双引号引起来。

注意:如果使用特殊字符,很多英文半角字符并不能被系统自动忽略,会出现在静态主机名中,可以出现但并不代表运行时不会出错,所以一定要按照域名命名规范来设置静态主机名。

[root@master ~]# hostnamectl --pretty set-hostname "KsC7"
[root@master ~]# hostnamectl
   Static hostname: master
   Pretty hostname: KsC7
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

上述例子演示了单独设置灵活主机名,而不影响静态主机名或瞬态主机名。

删除主机名

[root@master ~]# hostnamectl set-hostname ""      
[root@master ~]# hostnamectl
   Static hostname: n/a
Transient hostname: master
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64
[root@master ~]# hostname
master
[root@master ~]# cat /etc/hostname
cat: /etc/hostname: No such file or directory

上述例子中,将主机名设置为空,可以清空主机名并删除/etc/hostname文件,静态主机名为空,瞬态主机名为修改前主机名,重启后静态主机名依然为空,瞬态主机名恢复为默认的localhost。当然也可以通过输入--pretty等选项,单独删除某一种主机名。

直接修改文件

因为静态主机名不管如何修改,最终都是修改/etc/hostname文件,所以可以直接修改该文件达到修改且仅修改静态主机名的效果。

[root@master ~]# vi /etc/hostname
gaoqichen.com
"/etc/hostname" 1L, 14C written
[root@master ~]# hostnamectl
   Static hostname: gaoqichen.com
   Pretty hostname: KsC7
Transient hostname: master
         Icon name: computer-vm
           Chassis: vm
        Machine ID: d0d9b4a49bcae14693e2b38e13cfa3bc
           Boot ID: c7c542d3d75e40ab9a9f44c32bcf8809
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-862.el7.x86_64
      Architecture: x86-64

收尾及总结

修改静态主机名说白了本质都是修改/etc hostname文件,但是并不修改/etc hosts文件,需手动修改。

[root@KsC7 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@KsC7 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 KsC7
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

修改静态主机名会写入/etc/hostname文件,但是不会立即生效,可以通过重启本机来使其生效。

如果不方便重启也可以通过systemctl restart systemd-hostnamed重启hostnamed,然后注销从新登录,即可在命令行更新主机名。

以上三种方法修改主机名均需要按照域名命名规范命名(即:a-z不区分大小写,0-9,“-”),其中第一种和第三种修改方法修改后,是可以保留大小写字母的,但也只是用于命令行显示,其实不区分大小写。

Thanks for watching.

Last modification:February 20th, 2022 at 07:30 am
If you think my article is useful to you, please feel free to appreciate