在Linux中目前至少找到三个配置文件和host name有关,容易混淆:

1. /etc/host.conf: 这个是Linux的resolver(网络地址解析器?)的配置文件. 常见的内容是:

order hosts,bind
它的含义是, 在解析IP地址的时候,按照先搜索/etc/hosts文件,后发送DNS请求的方式来进行.

2. /etc/hosts: 在Berkly Internet Name Domain (BIND) 服务器出现之前,每台连接网络的linux主机都依靠次文件来解析网络上的主机名和对应的IP地址. 现在虽然这一工作大多都交给DNS服务器来完成了,但该配置文件仍然在某些特定的场合有用,比如在没有DNS的局域网内,或者系统初始化时.

3. /etc/sysconfig/network: 这个是主机连接网络的配置文件, 有点像Windows控制面板-->网络属性提供的功能, 比如gateway, 我们公司里一台Redhat主机上该文件的内容:

NETWORKING_IPV6=yes
HOSTNAME=hzciss03.china.nsn-net.net
NETWORKING=yes
GATEWAY=10.159.194.1
NISDOMAIN=eelinnis.emea.nsn-net.net


不过, hostname命令并不一定从/etc/hosts和/etc/sysconfig/network中获取主机名:

$ hostname  #将调用gethostname(2)函数来获取主机名. 通过查阅gethostname(2)得知, 该GLIBC函数通过调用uname(2)来获得信息.

$ hostname -s #将调用gethostbyname(3)函数来获得主机名. 这个函数和gethostname(2)的不同之处是,它首先读取/etc/nsswitch.conf, /etc/host.conf来判断是否要从/etc/sysconfig/network或者/etc/hosts里获取主机名.

所以:

使用hostname改变主机名后, /etc/hosts和/etc/sysconfig/network中关于主机名的信息未改变, uname -a返回的主机名信息则变成刚刚更改的了. 这个时候使用hostname -s命令去查询, 返回错误, 可能是因为主机名和/etc/hosts和/etc/sysconfig/network中不一致导致的.

 

结论:

设置或者更改主机名后, 需要手动更新/etc/hosts和/etc/sysconfig/network中的相关信息.

 

 

posted on 2010-02-12 15:15  考拉留  阅读(2519)  评论(0编辑  收藏  举报