linux 修改hostname

立即生效,非永久保存

此种方式修改,会立即生效,但是在重启系统之后会被还原

1
2
3
[root@linux1 ~]# hostname linux2.jerry.com
[root@linux1 ~]# hostname
linux2.jerry.com

重启后生效,永久保存

此种方式修改,不会立即生效,但在重启之后会生效

1
2
3
4
[root@linux1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=linux2.jerry.com
NTPSERVERARGS=iburst

以上两种方式结合,即能做到立即生效并永久保存

剖析hostname的设置

hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,但是它的值是Linux启动时从rc.sysinit读取的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@linux1 ~]# vi /etc/rc.d/rc.sysinit
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#
HOSTNAME=$(/bin/hostname)
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=Test修改了内核参数,那么hostname就变为了Test

1
2
3
4
5
6
7
8
9
10
11
12
[root@linux1 ~]# cat /proc/sys/kernel/hostname
linux2.jerry.com
[root@linux1 ~]# sysctl kernel.hostname=Test #修改内核参数
kernel.hostname = Test
[root@linux1 ~]# hostname #hostname已经被修改了
Test
[root@linux1 ~]# cat /proc/sys/kernel/hostname #内核参数也变化了
Test
[root@linux1 ~]# cat /etc/sysconfig/network #hostname的配置文件没有变化
NETWORKING=yes
HOSTNAME=linux2.jerry.com
NTPSERVERARGS=iburst
您的赞赏将鼓励我继续分享!
Fork me on GitHub