`

Linux主机名Hostname详解

阅读更多

1、 什么是主机名:

  无论在局域网还是INTERNET上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地 址不方便记忆,所以又有了域名。域名只是在公网(INtERNET)中存在(以实验为目的的局域网域网实验性除外),每个域名都对应一个IP地址,但一个 IP地址可有对应多个域名。域名类型 linuxsir.org 这样的;

  主机名是用于什么的呢?在一个局域网中,每台机器都有一个主机名,用于主机与主机之间的便于区分,就可以为每台机器设置主机名,以便于以容易记忆的方法来相互访问。比如我们在局域网中可以为根据每台机器的功用来为其命名。

  主机名相关的配置文件:/etc/hosts;

  2. 主机名配置文件;

  主机名的配置文件大多是/etc/hosts ;

  hosts - The static table lookup for host name(主机名查询静态表);

  由于 Linux 发行版本众多,与主机名相关的配置文件有时也有所不同。现在我们说说常见版本的主机名配置文件;

  2.1 主机名配置文件 /etc/hosts解说;

  Fedora/Redhat 或以Fedora/Redhat为基础打包的发行版,主机名配置文件是 /etc/hosts

  Debian或以Debian为基础打包的发行版,主机名配置文件是 /etc/hostname 和/etc/hosts

  Slackware的主机名配置文件是 /etc/hosts

  那我们来读读 /etc/hosts的内容,看这个文件是用来做什么的。hosts 配置文件是用来把主机名字映射到IP地址的方法,这种方法比较简单。但这种映射只是本地机的映射,也就是说每台机器都是独立的,所有的计算机都不能相互通过hostname来访问。

  注:在debian 中还有一个/etc/hostname的文件,这个文件就是直接把本地主机名写进去就行了,但要和 /etc/hosts中的本地主机名保持一致。

  /etc/hosts 的内容一般有如下类似内容:

  127.0.0.1 localhost.localdomain localhost

  192.168.1.195 debian.localdomain debian

  注:

  一般情况下hosts的内容关于主机名(hostname)的定义,每行为一个主机,每行由三部份组成,每个部份由空格隔开。其中#号开头的行做说明,不被系统解释。

  第一部份:网络IP地址;

  第二部份:主机名.域名,注意主机名和域名之间有个半角的点,比如 localhost.localdomain

  第二部份:主机名(主机名别名) ,其实就是主机名;

  当然每行也可以是两部份,就是主机IP地址和主机名;比如 192.168.1.195 debian

  127.0.0.1 是回环地址,比如我们不想让局域网的其它机器看到我们测试的网络程序,就可以用回环地址来测试。

  为什么需要定义域名呢?其实理解也简单,比如我们有三台主机,每台做不同的事,一台做MAIL服务器,一台做FTP服务器,一台做SMB服务器,所以我们就可以这样来设计hostname;

  127.0.0.1 localhost.localdomain localhost

  192.168.1.2 ftp.localdomain ftp

  192.168.1.3 mail.localdomain mail

  192.168.1.4 smb.localdomin smb

  把这上面这个配置文件的内容分别写入每台机器的/etc/hosts内容中,这样这三台局域网的机器就可以通过hostname来访问了。

  2.2 主机名(hostname)和域名(Domain)的区别;

  主机名就机器本身的名字,域名是用来解析到IP的。但值得一说的是在局域网中,主机名也是可以解析到IP上的;比如我们前面所说举的例子;

  2.3 局域网的机器,不能通过主机名互访的原因;

  有的弟兄可能会说,我的hostname彼此不能互访,其实这也问题也简单,我们前面已经提到了一个简单的解决办法。就是要让局域网中的所有主机都有一个通用的,并且包含所有主机的/etc/hosts文件;

  另一个是做解决办法是做局域网DNS服务器,如果您的主机特别少,就用前面所说的简单方法就行;如何做DNS服务器,我将在以后的文档中专题介 绍;不过我值得一提的是做任何服务器都是以效率优先的原则为基础。比如我们在局域网中两台机器,我们还有必要做DNS服务器吗?无论怎么解决,最终的都是 用最有效率的办法解决问题;我们不能说明DNS多高级。如果DNS是为外网服务的,那就另说了,不做也得做。对不对?

  3、主机名修改工具 hostname;

  其实主机名的修改也有专用工具,就是hostname ;我认为如果用这个工具来修改主机名,不如直接修改 /etc/hosts 来的方便;您可以查看 hosname ——help或 man hostname的帮助 。在这里我们只说简单的用法;

  hostname 工具是用来显示和设置系统主机名,看下面的洋文;

  hostname - show or set the system‘s host name

  举例解说:

  * 显示主机名:

  [root@linuxsir01 ~]# hostname

  linuxsir01

  此主机的主机名是linuxsir01,不加参数是用来显示当前操作的主机的主机名;

  * 临时设置主机名:

  我们可以用 hostname 后接主机名,这样就可以设置当前操作的主机的主机名,比如我们想把主机名设置为linuxsir02;

  [root@linuxsir01 ~]# hostname linuxsir02

  [root@linuxsir01 ~]# hostname 注:显示主机名

  linuxsir02

  通过hostname 工具来设置主机名只是临时的,下次重启系统时,此主机名将不会存在;所以您想修改主机名,想一直有效的,还是用前面所说修改主机名配置文件 /etc/hosts;

  * 显示主机IP:

  显示当前主机名的IP,可以用-i参数;

  [root@linuxsir01 ~]# hostname -i

  192.168.1.3

  4、本文未尽事宜;

  有时我们在登入桌面时,会提示找不到hostname ,这时您要做的是修改/etc/hosts,为您的机器添加一个主机名;先用 ifconfig -a 来查看主机的IP地址,然后把你主机的IP地址,指定主机名。

 

怎样修改Linux的hostname

Linux操作系统的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname。也可以直接cat /proc/sys/kernel/hostname查看。

#hostname
#cat /proc/sys/kernel/hostname

上面两种输出结果相同。

修改运行时Linux系统的hostname,即不需要重启系统
hostname命令可以设置系统的hostname

#hostname newname

newname即要设置的新的hostname,运行后立即生效,但是在系统重启后会丢失所做的修改,如果要永久更改系统的hostname,就要修改相关的设置文件。

永久更改Linux的hostname

man hostname里有这么一句话,”The host name is usually set once at system startup in /etc/rc.d/rc.inet1 or /etc/init.d/boot (normally by reading the contents of a file which contains the host name, e.g. /etc/hostname).” RedHat里没有这个文件,而是由/etc/rc.d/rc.sysinit这个脚本负责设置系统的hostname,它读取 /etc/sysconfig/network这个文本文件,RedHat的hostname就是在这个文件里设置。

所以,如果要永久修改RedHat的hostname,就修改/etc/sysconfig/network文件,将里面的HOSTNAME这一行修改成HOSTNAME=NEWNAME,其中NEWNAME就是你要设置的hostname。

Debian发行版的hostname的配置文件是/etc/hostname。

修该配置文件后,重启系统就会读取配置文件设置新的hostname。

hostname与/etc/hosts的关系

很过人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。

hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。 不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。具体可以man hosts。

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的记录。比如我的eth0的IP是192.168.1.61,我将hosts文件修改如下:

#hostname blog.infernor.net
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.61 blog.infernor.net blog

这样,我就可以通过blog或者blog.infernor.net来访问本机。

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

RHEL还有个问题。

我开始在测试的时候,只修改/etc/hosts,里面添加 192.168.1.61 blog.infernor.net blog,而/etc/sysconfig/network维持原状,也就是里面的HOSTNAME=localhost.localdomain。我重 启系统后居然发现hostname给修改成了blog.infernor.net。这样看的话,倒真觉得/etc/hosts是hostname的配置文 件。后来终于在/etc/rc.d/rc.sysinit这个启动脚本里发现了问题的所在。

rc.sysinit文件里一开始就设置了hostname

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

确实使用了/etc/sysconfig/network里的hostname值。不过后面还有一段关于设置hostname的

ipaddr=
if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]
; then
ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet
/ { print gensub("/.*","","g",$2) }')
if [ -n "$ipaddr" ]; then
eval $(ipcalc -h $ipaddr 2>/dev/null)
hostname ${HOSTNAME}
fi
fi

脚本判断hostname是否为localhost或者localhost.localdomain,如果是的话,将会使用接口IP地址对应的 hostname来重新设置系统的hostname。问题就出在这里,我的/etc/sysconfig/network默认的hostname是 localhost.localdomain,eth0的IP是192.168.1.61,而/etc/hosts里有192.168.1.61的记录。 于是就用192.168.1.61这条记录来替换了hostname。

估计这也是很多人将/etc/hosts误以为是hostname的配置文件的原因。

hostname带选项查询

hostname的-s -f -i等等选项都用到了/etc/hosts或者DNS系统,跟我们讨论的hostname有点远了,也容易产生误会。具体可以man hostname查看。

 

分享到:
评论
1 楼 xiaoyao3857 2013-05-20  
博主很有探索精神嘛,学习了

相关推荐

    Linux修改主机名命令详解

    在Linux操作系统中,主机...总的来说,Linux修改主机名涉及的命令主要是`hostname`和`hostnamectl`,以及可能的手动编辑`/etc/hostname`文件。理解这些操作可以帮助系统管理员更好地管理和维护Linux环境中的主机标识。

    RedHat_Linux网络配置文件详解

    - `HOSTNAME`: 服务器的主机名。 - `GATEWAY`: 网络的默认网关IP。 - `GATEWAYDEV`: 网关设备的名称,如eth0。 4. `/etc/hosts` 文件: 这是一个静态的IP到主机名映射文件,用于在没有DNS服务的情况下解析主机...

    linux知识宝库及其详解

    修改或添加`HOSTNAME=新主机名`(例如:`HOSTNAME=mynewhostname`)。 3. 运行`hostname 新主机名`命令确认修改结果。 4. 无需重启即可生效。 #### 三、配置启动模式 - **目标**:使Red Hat Linux启动至文字...

    Linux基础学习命令详解

    - `/etc/HOSTNAME`:定义主机名。 - `/etc/NETWORKING`:确认网络是否启用。 - `/etc/host.conf`:控制DNS解析策略。 - `/etc/hosts`:定义IP地址和主机名的映射。 - `/etc/hosts.allow`和`/etc/hosts.deny`:...

    linux dig命令详解

    ### Linux dig 命令详解:深入理解 DNS 查询利器 #### 概述 在 Linux 系统中,`dig`(Domain Information Groper)是一个功能强大的工具,用于查询域名系统(DNS)。它允许用户深入了解 DNS 的工作原理,帮助诊断...

    05_Linux网络详解.zip

    1.修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=server1.itcast.cn 2.修改ip地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes #是否开机启用 BOOTPROTO=...

    Linux命令lsof详解

    - **`hostname`**:指定 Internet 主机名。 - **`hostaddr`**:指定 IPv4 地址。 - **`service`**:指定服务名。 - **`port`**:指定端口号。 例如,`lsof -i tcp @1.2.3.4` 显示所有到 IP 地址 1.2.3.4 的 TCP...

    linux lsof命令详解.docx

    - `hostname` 指定主机名。 - `hostaddr` 指定 IP 地址。 - `service` 指定服务名称。 - `port` 指定端口号。 例如,要查找所有使用 IPv4 协议的 TCP 连接,可以使用命令 `lsof -i4TCP`。 #### 七、总结 `lsof...

    Linux应用技术:Linux常用命令.docx

    通过命令`hostname zhangsan`可以临时修改主机名为`zhangsan`,但需要注意的是这个修改仅在当前会话有效。若要永久修改主机名,需要编辑`/etc/hostname`文件。 #### 2. 更改工作目录与文件查找 - 使用命令`cd /boot...

    linux网卡配置详解.docx

    * hostname:用于设置计算机的主机名 五、网卡配置文件 网卡配置文件是 Linux 操作系统中用于存储网卡配置信息的文件。常见的网卡配置文件包括: * /etc/sysconfig/network:用于存储计算机的网络配置信息 * /etc...

    linux系统安装步骤教程详解.docx

    在"Hostname"字段中输入你想要的主机名。 10. **时区设置** 选择时区为"Asia/Shanghai",取消"System clock uses UTC"的勾选,确保系统时间与本地时间一致。 11. **设置root密码** 设置root用户的密码,这是...

    详解Linux 主机网络接入配置

    配置主机名可以使用`hostnamectl`命令,例如`hostnamectl set-hostname mycomputer.mydomain.com`。 总结来说,Linux主机网络接入配置涵盖了多个方面,包括但不限于网络设备识别、IP地址分配、路由设置、DNS配置...

    linux学习笔记和命令操作详解

    - `/etc/HOSTNAME`:设置主机名。 - `/etc/NETWORKING`:表明网络是否启用。 - `/etc/host.conf`:定义主机名查询的策略。 - `/etc/hosts`:IP地址与主机名的映射。 - 其他如`/etc/resolv.conf`用于DNS设置,`/...

    Linux 系统命令及其使用详解

    21. **ssh**:安全外壳协议,用于远程登录和管理服务器,如`ssh user@hostname`连接到远程主机。 这些只是Linux命令行中的冰山一角,实际上,Linux提供了丰富的命令集来处理各种任务。熟练掌握这些命令,将使你成为...

    linux 4.4内核配置选项详解.pdf

    最后,`CONFIG_DEFAULT_HOSTNAME`用于设置默认的主机名,用户可以在系统运行时通过系统调用`sethostname()`进行更改。至于`Support for paging`,这是指内存管理和交换机制,它是现代操作系统中不可或缺的一部分,...

    linux_下的dig_命令详解

    这里`+norec`表示不进行递归查询,`@F.ROOT-SERVERS.NET`是指定了一个根服务器地址,`HOSTNAME.BIND`和`CHAOS TXT`则用于获取服务器的主机名等信息。 #### 查看BIND版本号 要查看BIND(Berkeley Internet Name ...

Global site tag (gtag.js) - Google Analytics