Linux下hostname相关整理.md

2018-09-10  本文已影响0人  骁珺在努力

整理于:
http://www.cnblogs.com/kerrycode/p/3595724.html

问题1: 为什么/etc/sysconfig/network配置文件中HOSTNAME为localhost.localdomain,但是显示的hostname为po132345806-a,那到底hostname的配置值放在哪里?

[root@localhost ~]# more /etc/hosts  
# Do not remove the following line, or various programs  
# that require network functionality will fail.  
::1 localhost.localdomain localhost  
127.0.0.1 localhost.localdomain localhost  
192.168.244.128 hahaha.localdomain hahaha  
[root@localhost  ~]# more /etc/sysconfig/network  
NETWORKING=yes  
NETWORKING_IPV6=yes  
HOSTNAME=localhost.localdomain

解答:

hostname即时值在/proc/sys/kernel/hostname;启动加载值在/etc/sysconfig/network;
修改后没有生效的原因是/etc/sysconfig/network内HOSTNAME值是开机加载的;

hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,启动时从rc.sysinit读取;而/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

问题2: 修改了hostname后,如何使其立即生效而不用重启操作系统?

注意以上三种方法当前会话还是不会变化,但是后续新建会话会生效。

问题3: 修改hostname有几种方式?

运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改

运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改

运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改

需要重启生效,永久性修改。

问题4: hostname跟/etc/hosts 下配置有关系吗?

解答:

在/etc/rc.d/rc.sysinit中,有如下逻辑判断,当hostname为localhost后localhost.localdomain时,将会使用接口IP地址对应的hostname来重新设置系统的hostname

# In theory there should be no more than one network interface active
# this early in the boot process -- the one we're booting from.
# Use the network address to set the hostname of the client. This
# must be done even if we have local storage.
ipaddr=
# 如果HOSTNAME=localhost或者localhost.localdomain,则ipaddr取 ip addr的scope global的端口ip
if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]; then
    ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }')
    # 如果ipaddr不为空,将ipaddr的值做ipcalc -h(即域名解析),域名解析的值执行命令hostname
    if [ -n "$ipaddr" ]; then
        eval $(ipcalc -h $ipaddr 2>/dev/null)
        hostname ${HOSTNAME}
    fi
fi

其他:

如果/etc/hostname中,有值的话,会优先取这里面的值

上一篇 下一篇

猜你喜欢

热点阅读