今天stat文件的时候发现时间是错的,我很懵逼,我想改一下子,结果找了好多都不对。乱七八糟的只好自己整理一下。

修正Linux时间只需三步

  1. ntpdate ntp1.aliyun.com
    对准到阿里云校时服务器
  2. hwclock -w
    将系统时间同步到硬件时间
  3. vim /etc/localtime
    将UTC改为==CST==或者==UTC+8==即可。
    在这里插入图片描述

修改之后时间显示就是正常的了。
在这里插入图片描述
<font size=5>如果只想改时间看到这就可以退出去了,如果想知道每一步的原理就继续往下看。<font>




1 时间

linux系统有两个时钟:

  • 硬件时钟,即BIOS时间;
  • 系统时钟,是linux系统内核时间

在linux系统上程序运行时读取的时间都是系统内核时间。

硬件时钟是存储在CMOS里的时钟,关机后该时钟依然运行,主板的电池为它供电。每次Linux启动,系统内核会先去读取硬件时钟的设置,之后独立运行。<font color =green>当调整系统时钟或与internet同步后</font>,不会改变硬件时钟,但是下次启动又会变成硬件时钟的时间。

综上所述,所以想要永久修改linux时间并使得时间准确,就需要永久修改硬件时间,不然每次重新启动linux时,系统时间又变回之前的硬件时间。

记住上边绿色的话,待会儿会用到。

1.1 查看系统时间

  1. date
    在这里插入图片描述
    如上图,使用date会显示当前时间。

    <font size = 3 face=仿宋>因为我还原了一下,所以时间停留在我上次备份系统的时间。</font>

  2. timedatectl

    我这里就不演示了,用法自己去查(或者哪天我有空了再补充)。

    因为我用的CentOS6,还不支持 timedatectl,详细原因看上角标的附录图↗[^1][^2]。

1.2 查看硬件时间

  • clock
  • hwclock

上边两条语句都可以读取硬件时间。
在这里插入图片描述

1.3 修改系统时间

修改系统时间就是上边绿字说的两个:<font color =green>当调整系统时钟或与internet同步后</font>。

  1. 手动设定:
    date -s "yyyymmdd hh:mm:ss"

    比如使用 date -s "20221201 19:20:00",这里我将时间设置为2022年了。下图设置成功。
    在这里插入图片描述
    但是这样会存在一个问题就是秒数无法精确。所以可以使用自动对齐到网络时间。

  2. 自动对齐到网络时间:
    ntpdate ntp1.aliyun.com

    这里是直接将时间对齐到阿里云校时服务器(注意这里用的是UTC时间,和中国差八小时,看2.3节将其修改为中国时间)。
    在这里插入图片描述

    1.4 修改硬件时间

    为了保证下次开机时候不会重置为错误的时间,所以要将硬件时间也进行修正。

  • hwclock --set --date="yyyymmdd hh:mm:ss"
  • clock --set --date="yyyymmdd hh:mm:ss"

上边两句作用一样,用哪个都可以。
在这里插入图片描述
那你肯定想,这个如何对齐到网络时间呢。

硬件时间没有直接的类似于utpdate之类的操作。但是你可以将系统时间写入硬件,就用到了1.5了。

1.5 同步系统时间和硬件时间

如果你的系统时间是准确的,硬件时间是不准确的,那你可以使用:

  • hwclock --systohc
  • hwclock -w

两句作用是一样的,都是将系统时间同步到硬件时间。
在这里插入图片描述
在这里插入图片描述

2 时区

2.1 查看时区

cat /etc/sysconfig/clock

下图可以看出我设置的是北京时间。
在这里插入图片描述

2.2 修改时区

tzselect

使用tzselect会跳出选项,按照选项输入数字即可。

  • 输入tzselect输入选择地区
    在这里插入图片描述
  • 选择国家,我这选了中国
    在这里插入图片描述
  • 选择使用的时间,我这里选的北京时间(也就是上海时间)
    在这里插入图片描述

  • 他会让你再确认一下信息,选好之后确认即可。
    在这里插入图片描述

2.3 修改UTC CST时间

UTC是世界标准时间,CST是中国标准时间。

现在你可能会遇到一个问题,对齐到阿里云时间之后是UTC时间,明明时区设置的是中国,为什么还是显示UTC时间呢?
说实话,你时间对不对和你设置的时区毫无关系……

现在就对其进行修改。

vim /etc/localtime

修改localtime文件,将UTC改为==CST==或者==UTC+8==即可。
在这里插入图片描述
修改之后时间显示就是正常的了。
在这里插入图片描述
[^1]:图中大致意思是CentOS7才开始支持timdedatectl <br>在这里插入图片描述
[^2]:我尝试安装了一下,也是无法安装状态。 <br>
在这里插入图片描述