之前寫過一篇博客“深入理解Linux修改hostname”,裡面總結了RHEL 5.7下麵如何修改hostname,當然這篇博客的內容其實也適用於CentOS 6,但是自CentOS 7開始,已經跟CentOS 6已經有很大不同了,一直沒有總結CentOS 7下修改hostname的相關知識點,今天... ...
之前寫過一篇博客“深入理解Linux修改hostname”,裡面總結了RHEL 5.7下麵如何修改hostname,當然這篇博客的內容其實也適用於CentOS 6,但是自CentOS 7開始,已經跟CentOS 6已經有很大不同了,一直沒有總結CentOS 7下修改hostname的相關知識點,今天恰好遇到了這個問題,處理完後遂總結一下。
CentOS 7中的啟動跟CentOS 6有所區別,CentOS 6啟動過程中,會執行/etc/rc.d/rc.sysinit init執行的第一個腳本 這個腳本主要是初始化工作,如設置系統字體,啟動swapping,設置主機名等等。CentOS7和CentOS6啟動流程差不多,只不過到init程式時候,改為了systemd啟動了(並行啟動),也就是說CentOS 7不會去執行/etc/rc.d/rc.sysinit這個文件(當然也沒有這個文件了)讀取hostname的配置,CentOS 7新增了配置文件/etc/hostname,系統啟動的時候會讀取/etc/hostname這個配置文件來初始化內核主機名。
另外,我們可以通過配置/etc/hostname修改hostname。也可以通過新增的hostnamectl命令修改。在CentOS 7中,主機名可以分為下麵三種類型:
· 靜態主機名(static):靜態主機名也稱為內核主機名,是系統在啟動時初始化內核的主機名,預設從/etc/hostname讀取配置自動初始化靜態主機名
· 瞬態主機名(transient):瞬時主機名是在系統運行時臨時分配的主機名,例如,由DHCP等一些系統臨時分配的主機名,如果系統存在靜態主機名且有效,則不會用到瞬態主機名。
· 靈活主機名(pretty):靜態和瞬態主機名都是要符合功能變數名稱的字元串,而pretty主機名則可以包含其他一些特殊字元。
There are three 3 types of hostnames.
- The static hostname is the most important one, and it’s stored in the /etc/hostname file. This hostname is used among machines to identify a particular server.
- The pretty hostname got its name because it allows for more characters and punctuation. It’s more user-friendly, but since it uses non-standard characters, it is not permitted for machine code. The pretty hostname is stored in the /etc/machine-info directory.
- The transient hostname is one maintained in the Linux kernel. It is dynamic, meaning it will be lost after a reboot. This approach might be useful if you have a minor job requiring a temporary hostname, but you don’t want to risk making a permanent change that might be confusing.
The static (configured) host name is the one configured in /etc/hostname or a similar file. It is chosen by the local user. It is not always in sync with the current host name as returned by the gethostname() system call. If no host name is configured this property will be the empty string. Setting this property to the empty string will remove /etc/hostname. This hostname should be an internet-style hostname, 7bit ASCII, no special chars/spaces, lower case.
The transient (dynamic) host name is the one configured via the kernel's sethostbyname(). It can be different from the static hostname in case DHCP or mDNS have been configured to change the name based on network information. This property is never empty. If no host name is set this will default to "localhost". Setting this property to the empty string will reset the dynamic hostname to the static host name. If no static host name is configured the dynamic host name will be reset to "localhost". This hostname should be an internet-style hostname, 7bit ASCII, no special chars/spaces, lower case.
The pretty host name is a free-form UTF8 host name for presentation to the user. UIs should ensure that the pretty hostname and the static hostname stay in sync. I.e. when the former is "Lennart's Computer" the latter should be "lennarts-computer". If no pretty host name is set this setting will be the empty string. Applications should then find a suitable fallback, such as the dynamic hostname.
如上英文介紹,靜態主機名保存在/etc/hostname中,靈活主機名保存在/etc/machine-info,而瞬態主機名一般由內核參數維護,重啟後會丟失。
查看主機名(hostname)
我們可以有很多方式查看主機名,但是我們只能使用命令hostnamectl查看靜態、瞬態或靈活主機名,分別使用--static,--transient或--pretty參數。
[root@MyDB ~]# hostname
MyDB
[root@MyDB ~]# cat /etc/hostname
MyDB
[root@MyDB ~]# hostnamectl status
Static hostname: localhost.localdomain
Transient hostname: MyDB
Icon name: computer-desktop
Chassis: desktop
Machine ID: 955dde0d8f7341ebb19a1e247577c410
Boot ID: 4f2df049135e41c795a655cdf36c1c40
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@MyDB ~]# hostnamectl
Static hostname: MyDB
Pretty hostname: kerry's db
Icon name: computer-desktop
Chassis: desktop
Machine ID: 955dde0d8f7341ebb19a1e247577c410
Boot ID: 459eb877eeb34d7e910f4eec8ef4a42f
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@MyDB ~]# hostnamectl --static #查看靜態主機名
MyDB
[root@MyDB ~]# hostnamectl --transient #查看瞬時主機名
MyDB
[root@MyDB ~]# hostnamectl --pretty #查看靈活主機名
kerry's db
設置靜態主機名
[root@MyDB ~]# hostnamectl set-hostname kerrydb
或
[root@MyDB ~]# hostnamectl set-hostname --static kerrydb
設置靜態主機名立對新連接的會話立即生效,但是對於當前連接則不生效(例如,SecureCRT新開一個視窗就能看到修改結果)。如下測試所,修改靜態主機名會立即修改內核中的kernel.hostname
[root@MyDB ~]# hostnamectl set-hostname MyDB
[root@MyDB ~]#
[root@MyDB ~]# cat /proc/sys/kernel/hostname
mydb
[root@MyDB ~]# hostnamectl set-hostname kerrydb
[root@MyDB ~]# cat /proc/sys/kernel/hostname
kerrydb
[root@MyDB ~]# hostnamectl set-hostname --static yourdb
[root@MyDB ~]# cat /proc/sys/kernel/hostname
yourdb
[root@MyDB ~]#
另外,hostnamectl命令是永久修改hostname,這個命令修改靜態主機名,不關會設置內核參數kernel.hostname,它還會立即修改配置文件/etc/hostname,有興趣可以自己測試一下。
[root@MyDB ~]# more /etc/hostname
yourdb
設置瞬態主機名
[root@yourdb ~]# hostnamectl set-hostname --transient "KerryDB"
註意:如果系統存在靜態主機名且有效,則不會用到瞬態主機名。
設置靈活主機名
[root@yourdb etc]# hostnamectl set-hostname --pretty "kerry's db"
沒有設置靈活主機名前,此文件可能不存在(如下所示)
[root@yourdb ~]# cat /etc/machine-info
cat: /etc/machine-info: No such file or directory
設置後,就能查看此文件(如下所示)