设置硬件时钟日期时间的 Linux hwclock 命令示例
Linux 内核管理的时钟与硬件时钟不同。
即使您关闭系统,硬件时钟也会运行。
硬件时钟也称为 BIOS 时钟。您可以从 BIOS 更改硬件时钟的日期和时间。
但是,当系统启动并运行时,您仍然可以使用 Linux hwclock 命令查看和设置硬件日期和时间,如本教程中所述。
1.显示硬件时钟日期和时间
只需键入 hwclock,它将显示系统硬件时钟的日期和时间。这与您从 BIOS 屏幕看到的日期和时间相同。您还可以使用选项 -r 或 –show 来显示日期和时间。
# hwclock
Sat 10 Aug 2013 08:26:12 AM PDT -0.312862 seconds
# hwclock -r
Sat 10 Aug 2013 08:20:54 AM PDT -0.109748 seconds
# hwclock --show
Sat 10 Aug 2013 08:21:12 AM PDT -0.640982 seconds
注意: date 命令的输出可能与 hwclock 命令的输出相同(实际上应该相同)。但是,date 命令从 Linux 内核管理的时钟中获取日期和时间。例如,它们之间有大约 10 分钟的差异。
# date
Sat Aug 10 08:11:21 PDT 2013
2. 将系统时间复制到硬件时间
您确实想确保您的硬件时钟与系统时钟具有相同的日期和时间。
如您所见,系统时钟和硬件时钟时间之间存在差异。
# date
Sat Aug 10 08:16:17 PDT 2013
# hwclock
Sat 10 Aug 2013 08:26:53 AM PDT -0.687841 seconds
因此,使用如下所示的 hwclock 命令将硬件时钟设置为与系统时钟相同。这是 hwclock 命令的典型用法。
# hwclock -w
# hwclock
Sat 10 Aug 2013 08:16:27 AM PDT -0.625382 seconds
# date
Sat Aug 10 08:16:28 PDT 2013
注意:-w 和 –systohc 选项的作用相同。我喜欢使用–systohc,因为它很容易记住。--systohc 代表“系统到硬件时钟”,它将时间从系统复制到硬件时钟。
# hwclock --systohc
3.手动设置硬件时钟日期和时间
除了将系统日期和时间复制到硬件时钟之外,您还可以使用 –set 和 –date 选项手动设置值,如下所示。
以下将日期设置为 2013 年 8 月 11 日。请注意,如果您不指定时间,则会设置为 12:00:00 AM。
# hwclock --set --date 8/11/2013
# hwclock
Sun 11 Aug 2013 12:00:04 AM PDT -0.703489 seconds
您也可以同时设置日期和时间,如下所示。请注意,默认情况下它将使用当地时间。
# hwclock --set --date "8/11/2013 23:10:45"
# hwclock
Sun 11 Aug 2013 11:10:48 PM PDT -0.562862 seconds
您还可以获取 date 命令的输出,并将其传递给 –set 和 –date 选项,如下所示。
# hwclock --set --date "Sat Aug 10 08:31:24 PDT 2013"
# hwclock
Sat 10 Aug 2013 08:31:28 AM PDT -0.594118 seconds
4. 将硬件时间复制到系统时间
当您的硬件时钟显示正确的日期和时间,但不是您的系统时钟时,您可以使用如下所示的 -s 选项将硬件时间复制到系统时间,如下所示。
# hwclock
Sat 10 Aug 2013 08:20:28 AM PDT -0.687872 seconds
# date
Sat Aug 10 08:34:48 PDT 2013
# hwclock -s
# date
Sat Aug 10 08:20:55 PDT 2013
注意: -s 和 –hctosys 选项的作用相同。我喜欢使用–hctosys,因为它很容易记住。–hctosys 代表“硬件时钟到系统”,它将时间从硬件时钟复制到系统时钟。
# hwclock -hctosys
在测试时,如果您弄乱了系统时间,您可以使用date 命令示例将其设置为正确的日期和时间。
5. hwclock 调试模式
当您将 --debug 选项传递给 hwclock 时,它会显示一些调试信息,这些信息准确地显示了 hwclock 命令的作用。
下面显示了当我们将系统时间复制到硬件时间时它的作用。
# hwclock --systohc --debug
hwclock from util-linux-ng 2.17.2
Using /dev interface to clock.
Last drift adjustment done at 1375974983 seconds after 1969
Last calibration done at 1375974983 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2013/08/10 15:16:37
Hw clock time : 2013/08/10 15:16:37 = 1375974997 seconds since 1969
Time elapsed since reference time has been 0.009002 seconds.
Delaying further to reach the new time.
Setting Hardware Clock to 15:16:37 = 1375974997 seconds since 1969
ioctl(RTC_SET_TIME) was successful.
Not adjusting drift factor because it has been less than a day since the last calibration.
下面显示了当我们将硬件时间复制到系统时间时它会做什么。
# hwclock -hctosys --debug
hwclock from util-linux-ng 2.17.2
Using /dev interface to clock.
Last drift adjustment done at 1375975224 seconds after 1969
Last calibration done at 1375975224 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2013/08/10 15:23:20
Hw clock time : 2013/08/10 15:23:20 = 1375975400 seconds since 1969
Calling settimeofday:
tv.tv_sec = 1375975400, tv.tv_usec = 0
tz.tz_minuteswest = 420
注意:在 alpha 机器上,您可以使用 getepoch 查看纪元,使用 setepoch 设置纪元。当您尝试在 Alpha 机器上运行它时,您将收到以下错误机器。
# hwclock --setepoch --epoch=1952
The kernel keeps an epoch value for the Hardware Clock only on an Alpha machine.
This copy of hwclock was built for a machine other than Alpha
(and thus is presumably not running on an Alpha now). No action taken.
6.调整硬件时钟
系统启动时,从硬件时钟开始计时。hwclock –adjust 选项使用 /etc/adjtime 文件来控制调整。
# hwclock --adjust
/etc/adjtime 文件有以下三行。
# cat /etc/adjtime
-3.019877 1375975224 0.000000
1375975224
UTC
- 第 1 行中的三个值代表 1) 系统漂移率(以秒为单位),2) 自 1969 年 UTC 以来最近调整的秒数 3) 仅为 0
- 第 2 行与您在第 1 行中看到的值相同,即第 2 个值。即自 1969 年 UTC 以来最近调整的秒数
- 第 3 行将显示 UTC 或 LOCAL
7. hwclock 测试模式
当您使用 hwclock 更改内容时,使用 –test 选项,您可以执行命令而无需真正进行任何更改。
–systz 选项将相应地更改系统时区。但是,由于我们提供了 –test,它不会真正进行更改,但它仍然会执行命令而没有任何问题。
# hwclock --systz --test
Not setting system clock because running in test mode.
测试模式的最佳用途是将其与调试选项结合使用。即,当您想查看 hwclock 命令的功能,但不做任何更改时。
# hwclock --systz --test --debug
hwclock from util-linux-ng 2.17.2
Last drift adjustment done at 1375975224 seconds after 1969
Last calibration done at 1375975224 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Current system time: 1375975586 = 2013/08/10 15:26:26
Calling settimeofday:
UTC: 2013/08/10 15:26:26
tv.tv_sec = 1375975586, tv.tv_usec = 556277
tz.tz_minuteswest = 420
Not setting system clock because running in test mode.
下面确切地显示了 –adjust 选项在没有真正进行任何调整的情况下的作用。
# hwclock --adjust --test --debug
hwclock from util-linux-ng 2.17.2
Using /dev interface to clock.
Last drift adjustment done at 1375975224 seconds after 1969
Last calibration done at 1375975224 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2013/08/10 15:30:35
Hw clock time : 2013/08/10 15:30:35 = 1375975835 seconds since 1969
Time since last adjustment is 611 seconds
Need to insert -1 seconds and refer time back 0.978644 seconds ago
Needed adjustment is less than one second, so not setting clock.
- 点赞
- 收藏
- 关注作者
评论(0)