Linux修改hostname

查看主机hostname的方式

shell> hostname
rac4

shell> cat /proc/sys/kernel/hostname
rac4

shell> cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rac4

修改hostname

# 通过hostname命令修改hostname,立即生效但重启后会失效
shell> hostname RAC3
同立即生效但重启后会失效
shell> echo RAC3 > /proc/sys/kernel/hostname
shell> sysctl kernel.hostname=RAC3
kernel.hostname = RAC3

# 通过network文件中的hostname,重启后生效
shell> vi /etc/sysconfig/network
====================================================
NETWORKING=yes
HOSTNAME=RAC3
====================================================
shell> shutdown -r now

hostname与/etc/hosts的关系

hosts文件的作用相当如DNS,提供IP地址到hostname的对应。Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录
127.0.0.1 localhost.localdomain localhost
hosts文件格式是一行一条记录,分别是IP地址 hostname aliases,三者用空白字符分隔,aliases可选。

127.0.0.1到localhost这一条最好不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。

修改hostname后,如果想要在本机上用newhostname来访问,就必须在/etc/hosts文件里添加一条newhostname的记录。

more /etc/hosts
127.0.0.1   localhost localhost.localdomain 
192.168.1.252  com.svoid  svoid

这样,就可以通过svoid或者com.svoid 来访问本机。

从上面这些来看,/etc/hosts于设置hostname是没直接关系的,仅仅当需要在本机上用新的hostname来访问自己的时候才会用到/etc/hosts文件,两者没有必然的联系。

但是如果默认hostname为 localhost 或 localhost.localdomain, 将会使用/etc/hosts中接口IP地址对应的 hostname 来重新设置系统的hostname。

问题重现

shell> more /etc/hosts
127.0.0.1   localhost localhost.localdomain 
192.168.1.252  rac4

shell> more /etc/sysconfig/network   #修改hostname
NETWORKING=yes
HOSTNAME=localhost

shell> hostname localhost            #修改hostname
shell> shutdown -r now

shell> hostname       #重启之后发现hostname没变
rac4

查看/etc/rc.d/rc.sysinit启动脚本

HOSTNAME=$(/bin/hostname)
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
    HOSTNAME=localhost
fi


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 $ip 2>/dev/null)
            [ -n "$HOSTNAME" ] && { hostname ${HOSTNAME} ; break; }
    done
fi

参考:
http://www.cnblogs.com/yuechaotian/archive/2013/02/20/2918175.html
http://www.cnblogs.com/kerrycode/p/3595724.html

整理自网络

Svoid
2015-04-03

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29733787/viewspace-1551858/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29733787/viewspace-1551858/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值