CentOS7 修改主机名 hostname

问题

之前创建的虚拟机hostname可以自动设置为本机的IP地址,这样的话登录到某个主机上后,通过提示符上显示的主机名就能随时知道本机的IP地址,非常方便。但是最近创建了一批私有专区的机器,刚创建的时候是没有分配IP的,所以创建出来的主机的hostname就变成了一段无意义的字符串。现在就是要做的就是把主机的IP设置成主机的hostname。

概念

Linux操作系统的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname。也可以直接cat /proc/sys/kernel/hostname查看。

在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty)。静态主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。瞬态主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面,灵活主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如qqmm)。

解决方案

hostname

查看主机名

hostname

临时修改主机名,重启后失效

hostname new_hostname

修改/etc/hostname

使用命令man hostname 查看SET NAME

When called with one argument or with the --file option, the commands set the host name or the NIS/YP domain name. hostname uses the sethostname(2) function, while all of the three domain‐
name, ypdomainname and nisdomainname use setdomainname(2). Note, that this is effective only until the next reboot. Edit /etc/hostname for permanent change.

通过修改/etc/hostname, 重启后hostname就变为新值

使用ansible的hostname模块

这也是我进行批量修改操作使用的方式

[root@10-10-221-91 xct_centos]# cat init_hostname.yml
---
- hosts: xct20
  become: yes
  gather_facts: false
  vars:
  tasks:
    - name: show hostname
      shell: hostname
    - name: rename hostname
      hostname:
          name: "{{inventory_hostname.replace('.','-')}}"

hostnamectl

在CentOS 7中,有个叫hostnamectl的命令行工具,它允许你查看或修改与主机名相关的配置。

要查看主机名相关的设置:

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

只查看静态、瞬态或灵活主机名,分别使用--static,--transient或--pretty选项。

[root@localhost ~]# hostnamectl --static
localhost.localdomain
[root@localhost ~]# hostnamectl --transient
localhost.localdomain
[root@localhost ~]# hostnamectl --pretty

要同时修改所有三个主机名:静态、瞬态和灵活主机名:

[root@localhost ~]# hostnamectl set-hostname qqmm
[root@localhost ~]# hostnamectl --pretty
[root@localhost ~]# hostnamectl --static
qqmm
[root@localhost ~]# hostnamectl --transient
qqmm

就像上面展示的那样,在修改静态/瞬态主机名时,任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写。
一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你每次在修改主机名后一定要手动更新/etc/hosts,之后再重启CentOS 7。否则系统再启动时会很慢。

手动更新/etc/hosts

vim /etc/hosts
#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1  qqmm
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
::1        qqmm

重启CentOS 7 之后(reboot -f ),

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

如果你只想修改特定的主机名(静态,瞬态或灵活),你可以使用--static,--transient或--pretty选项。例如,要永久修改主机名,你可以修改静态主机名:

[root@localhost ~]# hostnamectl --static set-hostname qqmm
重启CentOS 7 之后(reboot -f ),
[root@localhost ~]# hostnamectl --static
qqmm
[root@localhost ~]# hostnamectl --transient
qqmm
[root@localhost ~]# hostnamectl --pretty
qqmm
[root@localhost ~]# hostname
qqmm

其实,你不必重启机器以激活永久主机名修改。上面的命令会立即修改内核主机名。
注销并重新登入后在命令行提示来观察新的静态主机名

参考:

  1. 如何在CentOS 7上修改主机名,http://www.jianshu.com/p/39d7000dfa47
  2. ansible hostname模块,http://docs.ansible.com/ansible/latest/hostname_module.html
  3. ansible 使用主机IP批量修改机器名, https://my.oschina.net/jastme/blog/510707
  4. Ansible 进阶技巧,https://www.ibm.com/developerworks/cn/linux/1608_lih_ansible/index.html

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 116,978评论 15 132
  • ansible 系统架构 ansible简介ansible是新出现的自动化运维工具,ansible是一个配置管理和...
    知了啊文阅读 7,942评论 1 52
  • 文/温台 如果我对一件事情很耐心,那无疑是我的兴趣所在。如果我对你很耐心,那无疑我是真的很喜欢你。 我觉...
    温台阅读 609评论 9 4
  • 正式步入了接受审判的一周,美好的周一补了一上午的数学练习册......简直是对时间的一种亵渎。 打算重新做人好好学...
    祁临尘阅读 41评论 0 0
  • 1. 一个懒汉,嘴里叼着根狗尾巴草,翘着二郎腿,敞开布满补丁衣服,在地上睡觉。这时不知从哪儿飘来一张泛黄,褶皱的纸...
    头发浓密小宝贝阅读 147评论 4 7