問題
之前創建的虛擬機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
其實,你不必重啟機器以激活永久主機名修改。上面的命令會立即修改內核主機名。
注銷并重新登入后在命令行提示來觀察新的靜態主機名
參考:
- 如何在CentOS 7上修改主機名,http://www.lxweimin.com/p/39d7000dfa47
- ansible hostname模塊,http://docs.ansible.com/ansible/latest/hostname_module.html
- ansible 使用主機IP批量修改機器名, https://my.oschina.net/jastme/blog/510707
- Ansible 進階技巧,https://www.ibm.com/developerworks/cn/linux/1608_lih_ansible/index.html