hostname归根结底,不过是个Name名称而已,目的是避开复杂的、无意义的主机标识(比如,默认的Localhost,IP标识等),让标识更人性化,更易记。如要访问该主机则需要进行一次“名称-IP地址”转换。 所以,这个Name是面向网络使用的,单机没有必要,就像一个人的名字一样,隐居南山的人根本不要什么名字,但是出来办理暂住证、未婚证明、子女择校、购买菜刀则需要名字。
首先我们需要搞厘清HostName跟ServerName、Host、DomainName、uname(redhat)区别,然后再看看HostName格式是个什么样子的。
一、HostName概念理解
linux(Redhat)上相关配置主机名相关的文件如下:
/etc/sysconfig/network
/etc/hosts
/proc/sys/kernel/hostname,Debian上是/etc/hostname
下面分别看看。
1、/etc/sysconfig/network
RedHat5.4内容如下:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=localhost.localdomain
默认HostName是localhost.localdomain,一般相同类型、版本系统安装完成后的默认值都相同。实际应用需手动修改掉。
2、/etc/hosts
这个文件Linux和Windows都有,只供本机“向外访问”解析使用的,相当于本机的DNS,所以设置的所谓HostName其实并不能对外部生效。比如自己设置:
12.34.56.78 Gogo
执行ping Gogo会自动转向12.34.56.78,而别人的机子可能设置为:12.34.56.78 Yazi,则需要ping Yazi。
但是,/etc/rc.d/rc.sysinit启动初始化文件则会检查/etc/sysconfig/network的HostName,如果是默认值(Localhost或Localhost.localdomain),还会检查这个/etc/hosts是否设置了名称,如果设置了新的名称则会自动替换/etc/sysconfig/network。
3、/proc/sys/kernel/hostname
RedHat5.4上该文件则只有这么一句:
localhost.localdomain
所以默认这个名称跟/etc/sysconfig/network是相同的。相同的为什么还需要记在两个地方呢?(肯请网友指教),天缘理解是/proc/sys/kernel/hostname看名称是供内核使用的文件,可能只是的系统内核变量。而/etc/sysconfig/network则记录更多与网络有关的参数设置,比如上文的IPV6是否开启等。
二、如何查看和修改HostName
1、查看主机名称
查看HostName命令如下:
# uname -n
# hostname
# cat /proc/sys/kernel/hostname
2、修改主机名称
临时修改,重启丢失:
# hostname newhostname
临时修改立即生效。
永久修改HostName(假设设置主机名为www.jb200.com):
# echo "HOSTNAME=www.jb200.com" >> /etc/sysconfig/network
# hostname "www.jb200.com"
上一句设置到文件永久修改,下一句临时修改,立即生效。这样修改后无需重启,因为临时修改和重启后配置相同。
三、HostName概念归纳
厘清这些概念,尽管有些概念之间风马牛不相及,但是他们都是Name:
HostName —— 上文介绍
ServerName —— 站在Client角度去称呼HostName
Host —— 主机统称
DomainName —— 域名,就像www.jb200.com,给所有人及访客使用,DNS负责解析映射到IP。
uname —— Linux显示系统信息命令,具体可使用uname --help 查看。