• 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/

  • 相关阅读:
    输入任意十进制数字,转换为任意进制表示
    Integer 原码解读
    Java 中位移运算符 >>,>>>,<<
    解读源码中的问题
    HashMap 源码解读
    js:插入节点appendChild insertBefore使用方法
    冒泡排序实例
    nodejs学习笔记(2)--Express下安装模版引擎ejs
    nodejs学习笔记(1)--express安装问题:express不是内部也或者外部的命令解决方案
    Jquery取得iframe中元素的几种方法
  • 原文地址:https://www.cnblogs.com/lemonu/p/11280095.html
Copyright © 2020-2023  润新知