由Linux内核管理的时钟与硬件时钟不同。

硬件时钟运行,即使您关闭您的系统。

硬件时钟也称为BIOS时钟。您可以从BIOS更改硬件时钟的日期和时间。

但是,当系统启动并运行时,仍然可以使用Linux hwclock命令查看和设置硬件日期和时间,如本教程所述。

1. 显示硬件时钟日期和时间

只需输入hwclock,它将显示系统硬件时钟的日期和时间。这是您将在BIOS屏幕上看到的相同日期和时间。您还可以使用选项-r或-show来显示日期和时间。

[root@localhost ~]# hwclock

2019年07月15日 星期一 22时10分57秒  -0.983165 秒

[root@localhost ~]# hwclock -r

2019年07月15日 星期一 22时11分13秒  -0.456334 秒

[root@localhost ~]# hwclock --show

2019年07月15日 星期一 22时11分32秒  -0.944544 秒

注意:date命令的输出可能与hwclock命令的输出相同(实际上应该是相同的)。但是,date命令从Linux内核管理的时钟中获取日期和时间。在这个例子中,它们之间大约有10分钟的差异。

[root@localhost ~]# date

2019年 07月 15日 星期一 22:00:02 CST

2. 将系统时间复制到硬件时间

您确实希望确保硬件时钟具有与系统时钟相同的日期和时间。

正如您目前所看到的,系统时钟和硬件时钟时间之间存在差异。

[root@localhost ~]# date

2019年 07月 15日 星期一 22:00:28 CST

[root@localhost ~]# hwclock

2019年07月15日 星期一 22时14分38秒  -0.957394 秒

因此,使用如下所示的hwclock命令将硬件时钟设置为与系统时钟相同。这是hwclock命令的典型用法。

[root@localhost ~]# hwclock -w

[root@localhost ~]# hwclock 

2019年07月15日 星期一 22时17分47秒  -0.066152 秒

[root@localhost ~]# date

2019年 07月 15日 星期一 22:17:50 CST

注意:-w和-systohc选项都执行相同的操作。我喜欢用-systohc,因为它很容易记住。systohc代表“系统到硬件时钟”,它将时间从系统复制到硬件时钟。

[root@localhost ~]# hwclock --systohc

3.手动设置硬件时钟日期和时间

您还可以使用-set和-date选项手动设置值,而不是将系统日期和时间复制到硬件时钟,如下所示。

以下日期为2019年8月11日。请注意,如果您没有指定时间,它将被设置为12:00 AM。

[root@localhost ~]# hwclock --set --date 8/11/2019

[root@localhost ~]# hwclock 

2019年08月11日 星期日 00时00分09秒  -0.254716 秒

您还可以同时设置日期和时间,如下所示。请注意,它默认使用本地时间。

[root@localhost ~]# hwclock --set --date "8/11/2019 23:10:45"

[root@localhost ~]# hwclock

2019年08月11日 星期日 23时10分49秒  -0.083291 秒

您还可以获取date命令的输出,并将其传递给-set和-date选项,如下所示。

[root@localhost ~]# hwclock --set --date "Sat Aug 10 08:31:24 PDT 2019"

[root@localhost ~]# hwclock

2019年08月10日 星期六 23时31分33秒  -0.184209 秒

4. 将硬件时间复制到系统时间

当硬件时钟显示正确的日期和时间,而不是系统时钟时,可以使用-s选项将硬件时间复制到系统时间,如下所示。

[root@localhost ~]# hwclock 

2019年08月10日 星期六 23时32分12秒  -0.439396 秒

[root@localhost ~]# date

2019年 07月 15日 星期一 22:22:31 CST

[root@localhost ~]# hwclock -s

[root@localhost ~]# date

2019年 08月 10日 星期六 23:32:36 CST

注意:-s和-hctosys选项都是一样的。我喜欢用-hctosys,因为它很容易记住。-hctosys代表“硬件时钟到系统”,它将时间从硬件时钟复制到系统时钟。

[root@localhost ~]# hwclock -hctosys


用法:

 hwclock [功能] [选项...]

在测试此功能时,如果您已经错开了系统时间,可以使用date命令示例将其设置为正确的日期和时间。

5. hwclock调试模式

当您将-debug选项传递给hwclock时,它会显示一些调试信息,这些信息准确地显示了hwclock命令的功能。

下面显示了当我们将系统时间复制到硬件时间时,它会做什么。

[root@localhost ~]# hwclock --systohc --debug

hwclock,来自 util-linux 2.23.2

将使用 /dev interface to clock。

上次漂移调整完成于1969(年)后 1565451084 秒

上次校准完成于1969(年)后 1565451084 秒

硬件时钟为 UTC 时间

将假设硬件时钟保持为 UTC 时间。

正在等等时钟滴答...

...已获取时钟滴答

从硬件时钟读取的时间:2019/08/10 15:33:57

硬件时钟时间:2019/08/10 15:33:57 = 1969(年)后 1565451237 秒

1565451237.500000 is close enough to 1565451237.500000 (0.000000 < 0.001000)

Set RTC to 1565451237 (1565451237 + 0; refsystime = 1565451237.000000)

正在将硬件时钟设置为 15:33:57 = 1969(年)后 1565451237 秒

ioctl(RTC_SET_TIME) 成功。

将不调整漂移系数,因为从上次校准还不到一天。

下面显示了当我们将硬件时间复制到系统时间时,它会做什么。

[root@localhost ~]# hwclock -hctosys --debug


用法:

 hwclock [功能] [选项...]

注意:在alpha机器上,可以使用getepoch查看历元,setepoch设置历元。当您尝试在a on Alpha机器上运行这个程序时,您将得到以下错误机器。

[root@localhost ~]# hwclock --setepoch --epoch=1952

hwclock: 只有在 Alpha 计算机上内核才会为硬件时钟保持一个纪元(epoch)值。

这版 hwclock 程序不是为 Alpha 计算机编译的(因此目前也不打算在 Alpha

 计算机上运行)。未执行任何操作。

6. 调整硬件时钟

当系统启动时,它占用硬件时钟的时间。hwclock -adjust选项使用/etc/adjtime文件来控制调整。

[root@localhost ~]# hwclock --adjust

/etc/adjtime文件有以下三行。

[root@localhost ~]# cat /etc/adjtime

0.004102 1565451237 0.000000

1565451237

UTC

  • *第一行的三个值表示1)系统漂移率(以秒为单位),2)自1969年UTC最近调整以来的秒数(仅0)

  • *第2行与第1行相同。我。自1969年UTC调整以来的秒数

  • *第3行将显示UTC或LOCAL

7. hwclock测试模式

当您使用hwclock(使用-test选项)更改内容时,您可以在不做任何更改的情况下执行命令。

systz选项将相应地更改系统时区。但是,由于我们给出了-test,所以它不会真正进行更改,但是它仍然可以毫无问题地执行命令。

[root@localhost ~]# hwclock --systz --test

将不设置系统时钟,因为正以测试方式运行。

测试模式的最佳用法是将其与调试选项组合使用。我。当您想要查看hwclock命令做什么,但不做任何更改时。

[root@localhost ~]# hwclock --systz --test --debug

hwclock,来自 util-linux 2.23.2

上次漂移调整完成于1969(年)后 1565451237 秒

上次校准完成于1969(年)后 1565451237 秒

硬件时钟为 UTC 时间

将假设硬件时钟保持为 UTC 时间。

当前系统时间:1565451565 = 2019/08/10 15:39:25

正在调用 settimeofday:

UTC:2019/08/10 15:39:25

tv.tv_sec = 1565451565, tv.tv_usec = 560400

tz.tz_minuteswest = -480

将不设置系统时钟,因为正以测试方式运行。

下面显示了-adjust选项在不做任何调整的情况下所做的工作。

[root@localhost ~]# hwclock --adjust --test --debug

hwclock,来自 util-linux 2.23.2

将使用 /dev interface to clock。

上次漂移调整完成于1969(年)后 1565451237 秒

上次校准完成于1969(年)后 1565451237 秒

硬件时钟为 UTC 时间

将假设硬件时钟保持为 UTC 时间。

正在等等时钟滴答...

...已获取时钟滴答

从硬件时钟读取的时间:2019/08/10 15:40:09

硬件时钟时间:2019/08/10 15:40:09 = 1969(年)后 1565451609 秒

时间自上次调整过去了 372 秒

需要插入 0 秒并将时间往回指 0.000018 秒

需要的调整不到一秒,将不设置时钟。