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

一、现象

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

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

  1. hostname kwang-test01

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

  1. $ cat /etc/sysconfig/network
  2. NETWORKING=yes
  3. HOSTNAME=kwang-test01
  4. 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 启动时脚本的一段代码:

  1. HOSTNAME=$(/bin/hostname)
  2.  
  3. set -m
  4.  
  5. if [ -f /etc/sysconfig/network ]; then
  6. . /etc/sysconfig/network
  7. fi
  8. if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
  9. HOSTNAME=localhost
  10. 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 获取,这一点我们可以从下面实操看出:

  1. # hostname //当前主机名
  2. kwang_test01
  3.  
  4. # cat /proc/sys/kernel/hostname //修改内核参数
  5. kwang_test01
  6.  
  7. # echo "kwang_test01_change" > /proc/sys/kernel/hostname //修改内核参数
  8. # cat /proc/sys/kernel/hostname
  9. kwang_test01_change
  10.  
  11. # hostname //修改后主机名,发现主机名已修改
  12. kwang_test01_change
  13.  
  14. # cat /etc/sysconfig/network //并发现这个配置的 HOSTNAME 值没有变
  15. NETWORKING=yes
  16. HOSTNAME=kwang-test01
  17. 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/

Linux hostname介绍的更多相关文章

  1. Linux hostname主机名配置文件/etc/hosts详解

    这篇文章为大家介绍linux hostname主机名配置文件/etc/hosts,包括主机名的用途.配置文件的操作方法等,有需要的朋友,可以参考下 1.什么是Linux主机名 无论在局域网还是INTE ...

  2. 01 Linux入门介绍

    一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以及游戏支持度不足 L ...

  3. Linux Epoll介绍和程序实例

    Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...

  4. Linux入门介绍

    Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...

  5. Linux 系统目录介绍

    bin : bin 是Binary 二进制的缩写,就是可执行文件了.Bin目录下是用户常用的命令. sbin: 此目录下也是二进制文件 ,不过这里的命令是 超级用户如 root 这样的用户使用的. e ...

  6. Linux命令介绍

    资料链接:(Linux基本命令介绍)http://note.youdao.com/share/?id=36c07917f8d3e6437c1e764c3516a3f2&type=note#/ ...

  7. 1.Linux入门介绍

    1.1 Linux概述 1.1.1 Linux简要介绍 Linux的由来: Linux的内核最初是由芬兰人李纳斯·托瓦茨在上大学的时候编写的一个内核,它是基于Unix操作系统编写的 大多服务器使用的是 ...

  8. Linux SELinux 介绍详解

    Linux SELinux 介绍详解 SElinux 简介 SElinux (Security Enhanced Linux)是由美国国家安全局(NSA)开发的.它已被植入到了Linux系统的内核当中 ...

  9. Linux文件介绍

    Linux文件介绍 Linux 文件属性 可以通过命令ll+文件名,查看文件的具体属性 例如:ll syz.gz 1736706 -rw-r--r--. 1 root root 28 Oct 27 1 ...

随机推荐

  1. 0015SpringBoot结合thymeleaf实现点击菜单高亮显示

    1.点击菜单,经过Controller层处理,正常定位到视图页面 2.编写抽象出公共片段的html,根据参数判断是否加高亮样式 3.多个目标页面引用步骤2中抽象出的公共片段,传不同的参数 具体实现如下 ...

  2. 前端学习笔记--Visual Studio Code安装及中文显示

    1.在官网https://code.visualstudio.com/下载对应的版本: 2.安装 一路点击下一步,选中  添加到PATH后,安装. 安装成功,可以直接打开使用: 把界面改成中文显示: ...

  3. 神经网络(3)---如何表示hypothesis,如何表示我们的model

    大脑中的神经元 我们的大脑都充满了上图所示的神经元,神经元有一个细胞体(cell body),还有一些input wires,专业词汇叫做树突(dendrite),它们从其它地方接收输入信息,神经元还 ...

  4. 17.组件页面应用和vue项目生成

    基本示例 这里有一个 Vue 组件的示例: // 定义一个名为 button-counter 的新组件 Vue.component('button-counter', { data: function ...

  5. AirTest与模拟器连接(二)

    如果我们手边没有可用的Android真机,又想进行Android应用自动化测试,这时候就要使用AirtestIDE的Android模拟器自动化测试功能了. AirtestIDE所支持的模拟器包括 An ...

  6. [React + GraphQL] Use useLazyQuery to manually execute a query with Apollo React Hooks

    When using useQuery from Apollo React Hooks, the request will be sent automatically after the compon ...

  7. WebService操作

    webservice是一种服务器通信技术,封装了socket.

  8. 学到了武沛齐讲的Day12-5

    字节为8个位为单位 而计算机存储是位为单位储存.(有点意思) 开始老美用的是ascii码(1个字节),  utf8: 3字节   gbk : 2字节      目前的用于实用的 Unicode 版本对 ...

  9. HEML与Css的基本理解

    什么是 HTML? HTML 就像造房子一样,一栋房子有多个组成部分,html类似于房子的户型,它设计了房子的整体架构.分区.布局,而且还定义了每个区块的功能作用.html技术为后续入住的数据事先搭建 ...

  10. 066_调整虚拟机内存参数的 shell 脚本

    #!/bin/bash#脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt-client 软件包 cat << EOF1.调整虚拟机最大内存数值2. ...