实验环境:centos6.8,其他版本linux可能不同,以实际环境为准
没想到一个主机名都这么多注意事项
1、实验前的各条件
[root@localhost ~]#cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=localhost.localdomain [root@localhost ~]#cat /proc/sys/kernel/hostname localhost.localdomain [root@localhost ~]#cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
———————-永久性修改,重启生效———–
2、修改/etc/sysconfig/network文件,发现主机名不变,重启后主机名更改
[root@localhost ~]#cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=master [root@localhost ~]#cat /proc/sys/kernel/hostname localhost.localdomain [root@localhost ~]#hostname localhost.localdomain [root@localhost ~]#reboot Broadcast message from root@localhost.localdomain (/dev/pts/0) at 22:05 ... The system is going down for reboot NOW! Connecting to 192.168.175.11:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. Last login: Wed Apr 12 22:01:44 2017 from 192.168.175.30 [root@master ~]#hostname master [root@master ~]#cat /proc/sys/kernel/hostname master
——————-临时性修改, 立即生效,重启系统失效————–
3、直接修改内核参数,可以改变主机名。
直接修改内核参数,可以改变主机名。必须要重新打开终端,修改后的主机名:slave,配置文件/etc/sysconfig/network内容不改变。但是重启主机后修改的主机名(slave)参数丢失
[root@master ~]#echo slave > /proc/sys/kernel/hostname [root@master ~]#cat /proc/sys/kernel/hostname slave [root@master ~]#hostname slave [root@master ~]#su - zhao [zhao@slave ~]$exit [root@slave ~]#reboot The system is going down for reboot NOW! Connection closed by foreign host. Disconnected from remote host(centos6-11) at 22:12:00. Connecting to 192.168.175.11:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. Last login: Wed Apr 12 22:09:56 2017 from 192.168.175.30 [root@master ~]#hostname master [root@master ~]#cat /proc/sys/kernel/hostname master
4、使用hostname命令修改,
配置文件不变,内核参数改变,重新打开终端生效,重启系统,修改的参数(one)丢失,和上面的直接修改内核的效果是一样的
[root@master ~]#hostname one [root@master ~]#cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=master [root@master ~]#cat /proc/sys/kernel/hostname one [root@master ~]#hostname one
5、配置文件/etc/sysconfig/network说明
hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,但是它的值是Linux启动时从rc.sysinit读取的(见下面),读取后赋值给内核的参数,知道这个原理之后就好办了,先理解,后记忆,这样才深刻牢靠
配置文件是系统启动的时候读取的,所以如果要永久生效,得要修改配置文件,要想重读配置文件,重启系统,
hostname命令也是修改内核的参数,和直接echo hostname到内核参数是一样的,所以只是临时性生效,
Hostname is a kernel parameter which stores hostname of the system. Its location is"/proc/sys/kernel/hostname" The value for this parameter is loaded to kernel by rc.sysinit file during the boot process.
而/etc/rc.d/rc.sysinit中HOSTNAME的取值来自与/etc/sysconfig/network下的HOSTNAME,代码如下所示,至此,我们可以彻底明白了。
HOSTNAME=`/bin/hostname` HOSTTYPE=`uname -m` unamer=`uname -r` set -m if [ -f /etc/sysconfig/network ]; then . /etc/sysconfig/network fi if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then HOSTNAME=localhost fi
结论:/etc/sysconfig/network 确实是hostname的配置文件,hostname的值跟该配置文件中的HOSTNAME有一定的关联关系,但是没有必然关系,hostname的值来自内核参数/proc/sys/kernel/hostname,如果我通过命令sysctl kernel.hostname=master修改了内核参数,那么hostname就变为了master了。
6、主机名与/etc/hosts配置文件关系
其实hostname也跟/etc/hosts有关系。在/etc/rc.d/rc.sysinit中,有如下逻辑判断,当hostname为localhost后localhost.localdomain时,将会使用接口IP地址对应的hostname来重新设置系统的hostname。
if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]; then ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }') if [ -n "$ipaddr" ]; then eval $(ipcalc -h $ipaddr 2>/dev/null) hostname ${HOSTNAME} fi fi
7、修改hostname有几种方式?
hostname master --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 echo master > /proc/sys/kernel/hostname --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 sysctl kernel.hostname=master --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 修改/etc/sysconfig/network下的HOSTNAME变量 --需要重启生效,永久性修改。
8、如何既立即生效主机名又永久生效主机名,这些方式只是结合永久性修改和临时性修改hostname,使其不必重启Linux服务器
要想永久生效,修改配置文件
要想立即生效,直接修改内核参数或者使用hostname命令修改,然后重新打开一个终端,在新终端上操作
9、centos7修改方法
在CentOS6及其以下版本一般通过修改配置文件的办法来修改主机名,此配置文件一般为/etc/sysconfig/network,但在CentOS7中,很多系统管理工具都被替换了。
例如想更改主机名,不能参考以前的方法了,新的配置文件已经更新为/etc/hostname,尽管修改/etc/sysconfig/network配置文件(此文件依然存在,只是是空的)可能起作用,但不得不考虑有些Linux软件是否会使用source此文件或是否使用环境变量$HOSTNAME。因此在此总结了几种CentOS7修改主机名的方法。
1.直接使用文本编辑器修改/etc/hostname配置文件,系统重启的时候会读取这个文件当做主机名。
2.使用hostnamectl命令:#hostnamectl set-hostname name
[root@localhost ~]#hostnamectl Static hostname: localhost.localdomain Icon name: computer-vm Chassis: vm Machine ID: 474be6a49ddf4de68b0b2728cfb161f3 Boot ID: 2113d02d984842ac8eed6e003dde3116 Virtualization: vmware 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 ~]#cat /etc/hostname localhost.localdomain [root@localhost ~]#hostnamectl set-hostname master [root@localhost ~]#cat /etc/hostname master [root@localhost ~]#hostnamectl Static hostname: master Icon name: computer-vm Chassis: vm Machine ID: 474be6a49ddf4de68b0b2728cfb161f3 Boot ID: 2113d02d984842ac8eed6e003dde3116 Virtualization: vmware 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 ~]#echo $HOSTNAME localhost.localdomain [root@localhost ~]#hostname master
要打开新终端才能生效,这里的这个命令代替了上面centos6的两个操作(修改配置文件和修改内核参数),但是这个终端两个命令执行结果不同,不知道以哪个为准。
–
–
–
评论前必须登录!
注册