zoukankan      html  css  js  c++  java
  • Linux hostname介绍

    以下操作均时基于 Centos 6.8 操作。

    一、现象

    在平时工作中,当需要修改主机名时,我们一般会这样操作:

    第一步,通过 hostname 命令临时修改主机名。

    hostname kwang-test01

    第二步,修改配置文件,保证机器重启时主机名不会变。

    $ cat /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=kwang-test01
    NOZEROCONF=yes

    以上操作确实是修改主机名的正确姿势,也能达到预期的效果,但为什么要这样操作呢,知其然也要知其所以然,下面我们来看看原因。

    二、透过现象看本质

    2.1 hostname 临时修改主机名

    当我们执行 hostname <ip> 命令时,会临时修改 Linux Kernel 中一个同为 hostname 的内核参数,而 Linux Kernel 中 hostname 参数保存在 /proc/sys/kernel/hostname 中。

    2.2 修改 /etc/sysconfig/network 配置永久修改主机名

    有人可能会困惑,为什么永久修改主机名需要修改 /etc/sysconfig/network 的 HOSTNAME 参数?回答这个问题前,先让我们看看 Linux 启动时脚本的一段代码:

    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

    可以看出 Linux 的启动逻辑:首先会读取 /etc/sysconfig/network 中的 HOSTNAME 参数,然后将系统主机名配置成获取的 HOSTNAME 参数。

    注意,我们也说了,只有在 Linux 在启动时才会加载 /etc/sysconfig/network 配置,但平时执行 hostname 命令系统是如何知道主机名临时修改了呢?我们继续往下看。

    2.3 更进一步

    通过 hostname 命令获取的值跟 /etc/sysconfig/network 文件中的 HOSTNAME 有一定的关联,但是没有必然联系,只有在 Linux 启动时才会与配置文件的 HOSTNAME 值有保持一致,启动相互不影响。进一步了解,我们发现通过 hostname 命令获取的值并不是直接从 /etc/sysconfig/network 获取,而是从 Linux Kernel 的内核参数 /proc/sys/kernel/hostname 获取,这一点我们可以从下面实操看出:

    # hostname         //当前主机名    
    kwang_test01
    
    # cat /proc/sys/kernel/hostname    //修改内核参数
    kwang_test01
    
    # echo "kwang_test01_change" > /proc/sys/kernel/hostname    //修改内核参数
    # cat /proc/sys/kernel/hostname         
    kwang_test01_change
    
    # hostname         //修改后主机名,发现主机名已修改
    kwang_test01_change
    
    # cat /etc/sysconfig/network     //并发现这个配置的 HOSTNAME 值没有变
    NETWORKING=yes
    HOSTNAME=kwang-test01
    NOZEROCONF=yes

    结论:

    • hostname 命令获得的值是从 /proc/sys/kernel/hostname 获取的,与 /etc/sysconfig/network 配置中的 HOSTNAME 没有直接关联;
    • /proc/sys/kernel/hostname 内核参数的初始值在 Linux 启动时从 /etc/sysconfig/network 配置中加载,启动后该值通过 root 账号可以修改。

    三、疑惑

    最近在遇到一个奇怪的现象,/proc/sys/kernel/hostname 中的值被定时修改了,没有人为操作,系统也没有重启,暂时没有解决,后续解决了更新。

    【参考资料】

    [1]. https://jaminzhang.github.io/linux/deep-understanding-of-linux-hostname/

  • 相关阅读:
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
    Data Structure and Algorithm
  • 原文地址:https://www.cnblogs.com/lemonu/p/11280095.html
Copyright © 2011-2022 走看看