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

4 thoughts on “hostname到底是怎么一回事

  1. jack

    分析的很透彻,以前只是知道有hostname这个东西,现在却知道了设计hostname的缘由,真是受益非浅啊。

    Reply
  2. Pingback: hostname到底是怎么一回事 | 81难

  3. free vcc

    hi!,I love your writing so so much! proportion we keep in touch extra about your article on AOL? I require a specialist in this space to unravel my problem. Maybe that is you! Looking ahead to look you.

    Reply
  4. Pingback: 【整理】什么是hostname为何要设置hostname – 在路上

Leave a Reply to free vcc Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>