在安裝一些系統時,需要修改hostname,比如安裝Hadoop時需要修改主機名,而且主機名不能包含下划線。
實際上,主機名分三種(命令hostnamectl或hostnamectl status可查看三種主機名):
1) “pretty”主機名,UTF8格式的主機名,這個僅供閱讀,長度無限制;
2) “static”主機名,日常所稱的主機名(traditional hostname)。最多為64個字符,僅可包含“.”、“_”、“-”、“a-z”、“A-Z”和“0-9”這些字符,並且不能以“.”打頭和結尾,也不能兩個“.”連續;
3) “transient”主機名,內核維護的動態主機名,初始化為“static”主機名,默認為localhost。也為hadoop要求的主機名,它的約束規則同“static”主機名。如果存在“static”主機名,且不是“localhost”,那么將忽略“transient”主機名。“transient”主機名可被DHCP和mDNS修改。
當三種主機名相同時,“hostnamectl status”只會顯示“static”主機名,三種主機名的設置方法:
hostnamectl --pretty set-hostname NAME hostnamectl --static set-hostname NAME hostnamectl --transient set-hostname NAME |
|
hostnamectl修改的主機名,在系統重啟之前會一直有效,而hostname只對當次有效。如果不指定參數,則一次設置三種主機名:
hostnamectl set-hostname NAME |
1. 臨時修改主機名
命令hostname不但可以查看主機名,還可以用它來修改主機名,格式為:hostname 新主機名。
在修改之前9.4.149.11對應的主機名為hadoop_10202,而9.4.149.6對應的主機名為hadoop_10203。兩者的主機名均帶有下划線,因此需要修改。為求簡單,僅將原下划線去掉:
hostname hadoop10202
hostname hadoop10203
經過上述修改后,類似於修改環境變量,只臨時有效,還需要修改相應的系統配置文件,以永久有效。
2. 永久修改主機名
不同的Linux發行版本,對應的系統配置文件可能不同,SuSE 10.1是/etc/HOSTNAME:
# cat /etc/HOSTNAME hadoop_10202 |
將文件中的“hadoop_10202”,改成“hadoop10202”。有些Linux發行版本對應的可能是/etc/hostname文件,有些如CentOS和RedHat同時有/etc/hostname和/etc/sysconfig/network兩個文件,修改/etc/hostname即可。
需注意:/etc/sysconfig/network的格式和/etc/hostname、/etc/HOSTNAME不同,為:
HOSTNAME=主機名 |
修改之后,需要重啟網卡,以使修改生效,執行命令:/etc/rc.d/boot.localnet start(不同系統命令會有差異,這是SuSE上的方法,其它一些可能為:/etc/init.d/network restart或service network restart等),再次使用hostname查看,會發現主機名變了。
上述方法如果不能永久有效,則可使用hostnamectl修改來修改永久有效。如果還是不行,則可重啟系統以使永久有效。
可以通過以下多種方法查看主機名:
1) hostname命令(也可以用來修改主機名,但當次僅當次會話有效)
2) hostnamectl命令(也可以用來修改主機名,系統重啟前一直有效)
3) cat /proc/sys/kernel/hostname
4) cat /etc/hostname或cat /etc/sysconfig/network(永久性的修改,需要重啟)
5) sysctl kernel.hostname(也可以用來修改主機名,但僅重啟之前有效)
批量修改/etc/hostname工具(其它可參照):
https://github.com/eyjian/libmooon/blob/master/shell/set_hostname.sh
|
3. 區別
方法 |
效果 |
hostname |
當次登錄臨時有效,新登錄或重新登錄后無效 |
hostnamectl |
系統重啟之前一直有效,重啟后無效 |
/etc/hostname |
只有在系統重啟后才有效 |