以下操作均时基于 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/

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. vue quill使用&quill 自定义图片上传&自定义mp4 更换标签

    pluins 创建quill 目录 创建文件video.js import { Quill } from 'vue-quill-editor' // 源码中是import直接倒入,这里要用Quill. ...

  2. Laravel - 解决连接MySQL时报"The server requested authentication method unknown to the client”错误

    2019-04-12发布:hangge阅读:934   1,问题描述 最近建了个 Laravel 项目,当配置好 MySQL 数据库进行请求时,页面报如下错误:   SQLSTATE[HY000] [ ...

  3. AcWing P378 骑士放置 题解

    Analysis 这道题跟前几道题差不多,依旧是匈牙利算法求二分图匹配,在连边的时候,要连两个矛盾的位置(即一个骑士和其控制的位置).然后就跑一遍匈牙利算法就好了. #include<iostr ...

  4. /etc/inittab

    # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON ...

  5. Java 【 ArrayList应用 】 (SDUT 4069 C~K的班级)

    Java 里面的所有的东西 数组.字符数组.等等,都要 new 新申请. C~K的班级 代码: package test; import java.util.*; public class Main ...

  6. ELK系列(7) - 测试环境下Logstash异常退出:block in multi_receive_encoded

    问题与分析 在本地测试无误后将ELK部署到了测试环境,结果第二天发现Logstash挂掉了,一开始以为是自动部署之类导致的问题.之后几天时间里Logstash总是会down掉,查看了下日志文件,发现报 ...

  7. docker安装ubuntu以后无ifconfig命令解决办法

    解决: 1.apt-get  update 2.apt install net-tools   #ifcongig 3.apt install iputils-ping     # ping

  8. hdu2476(区间dp+dp)

    String painter Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. java spark list 转为 RDD 转为 dataset 写入表中

    package com.example.demo; import java.util.ArrayList; import java.util.Arrays; import java.util.Hash ...

  10. 【Oracle】往Oracle11g的某表插入近千万条记录,耗时略超一小时

    和MySql的对比下,两者有数量级的差距. 表ddl: CREATE TABLE tb04 ( "ID" ,) not null primary key, "NAME&q ...