hostname到底是怎么一回事

hostname 就是Linux的主机名,经常看到的地方就是终端,

[user@hostname]。

有一个相关的命令叫hostname,可以临时改变系统的hostname。

$ hostname newhostname

系统重启后,这种改变的效果就会消失。

那么如何永久的改变hostname呢?

hostname是Linux的一个kernel变量,在proc文件系统的位置是 /proc/sys/kernel/hostname。在系统启动的时,/etc/rc.d/rc.sysinit这个脚本通过读取配置文件/etc/sysconfig/network来设置系统的hostname。所以要永久的修改hostname,就要修改/etc/sysconfig/network这个配置文件。将HOSTNAME这一行改成HOSTNAME=NEWNAME

/etc/rc.d/rc.sysinit 刚开始有这一段

[code lang=”bash”]

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

[/code]

代码说明一切哇。。

讲到hostname就不得不说另一个相关的东东 /etc/hosts

hosts的作用就相当一个本地局部的DNS,提供ip到hostname的对应。在互联网的早期时代,网络上计算是相当少的,就那几个ip,记起来也不是什么难事,随着网络上计算机的增多,ip记起来就有点压力了,名字对人来说要比ip好记,hosts就是干这种事的,文件格式非常简单,第一行都是类似这样的:

[code lang=”text”]

IP_address canonical_hostname [aliases…]

[/code]

随着网络上计算机的爆炸性增多,这种本地存放hostname到ip的映射表已经不现实了,并且每台电脑上映射表可能不一样,会造成混乱,因此就出现了DNS这个东东(分布式数据库的典范哇),大家只要配好DNS,映射表都是一样。

虽然有了DNS,/etc/hosts还是保留下来了,为了向前兼容,满足自定义需求。。。并且这个文件里的映射表优先级要高于DNS查询返回的结果。

扯的有点多了。。

说说与之前说的hostname有什么关系吧。

配好hostname后,我们想在本机来通过hostname来访问自己的机子,肿么办?修改hosts ^_^,在里面加一条记录,

[code lang=”text”]

本机ip hostname

[/code]

再讲一个很多人经常遇到的问题,其实也不算是问题,只不过是没弄清原因罢了。有时候我们不改/etc/sysconfig/network,而在/etc/hosts里加一条newhostname到本地ip的记录重启后也会修改hostname,这是为什么呢。

还是要看/etc/rc.d/rc.sysinit这个脚本。

有这样一段:

[code lang=”bash”]

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

[/code]

可以看到,如果HOSTNAME是”localhost”或者”localhost.localdomain”的时候,脚本先获取本机分配的ip地址,然后ipcalc通过ip地址来反查hostname,将查到的hostname设为本机的hostname。

而/etc/sysconfig/network里的默认配置是

HOSTNAME=localhost.localdomain

现在一切都了然了吧 🙂

所以修改/etc/hosts并不能直接修改hostname,而是由于恰巧某些条件的满足而造成的,而这种恰巧的机率又是比较大滴。。

条件是(举一个例子):

本机ip配置为 192.168.1.53

在hosts里有这样一行

192.168.1.53 newhostname

孤独的北山羊 /
Published under (CC) BY-NC-SA in categories GNU/Linux  tagged with hostname  hosts  ipcalc  network