由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 秒
需要的调整不到一秒,将不设置时钟。
关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。