再谈RHEL/CentOS中的hostname设置问题

2011年07月14日 Linux基础 评论 11 条 阅读 18,359 views 次

大家对RHEL/CentOS系统中的主机名设置应该不陌生,但您是通过什么方法来设置的呢?系统是如何来处理您设置的主机名吗?今天就和大家来谈谈这个话题。
查看主机名的命令有
hostname
cat /proc/sys/kernel/hostname (其实这两个是调用的都是一个值/proc/sys/kernel/hostname)

uname -n
当然hostname后面加上相应的主机名,就是临时设置主机名了

和主机名相关的配置文件是
/etc/sysconfig/network
/etc/hosts

您是通过哪个文件来设置主机名的呢?我是通过/etc/sysconfig/network,当然通过/etc/hosts也能设置,那是为什么呢?下面就带大家一起分析一下

打开/etc/rc.d/rc.sysinit这个文件,这个脚本是在系统启动的时候所进行的一些初始化过程,建议大家可以研究一下,对了解Linux系统启动的流程有非常大的帮助,哈哈,有点跑题了。

我的系统是RHEL6.1版本

8行开始

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

这里先创建一个HOSTNAME变量,并将hostname这个命令的结果赋值给这个变量。如果赋值为空,则重新设置HOSTNAME变量。

325行开始

ipaddr=
        if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]; then
                ipaddr=$(ip addr show to 0.0.0.0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }')
                for ip in $ipaddr ; do
                        HOSTNAME=
                        eval $(ipcalc -h $ipaddr 2>/dev/null)
                        [ -n "$HOSTNAME" ] && { hostname ${HOSTNAME} ; break; }
                done
        fi

判断hostname是否为localhost或者localhost.localdomain,如果是的话,将会使用接口IP地址对应的hostname来重新设置系统的hostname。

所以说,通过哪个文件设置主机名,都是一样的,但要注意,只有在系统启动的时候读取一次/etc/rc.d/rc.sysinit,所以要想在系统不用重新启动的情况下,修改主机名的话,就用hostname host_name(主机名)来直接设置,然后修改/etc/sysconfig/network文件,就这样就OK了。

如果说,在/etc/hosts与/etc/sysconfig/network都设置了的话,最后会以/etc/sysconfig/network为准的,请注意。重新启动网络(network)服务也是不能让主机名设置的生效的。

注:此文的yzz的留言也分析了这两段内容,很不错,建议大家阅读一下!感谢yzz的指正。

11 条留言  访客:5 条  博主:5 条   引用: 1 条

来自外部的引用: 1 条

  • 转载:再谈RHEL/CentOS中的hostname设置问题 | 漂亮的笨蛋

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录