clock命令在现代Linux发行版中已过时,建议使用hwclock命令。许多系统中clock是hwclock的符号链接。
clock命令用于读取和设置硬件时钟(RTC,Real Time Clock),以及同步系统时间和硬件时间。硬件时钟是计算机主板上的独立时钟,即使计算机关机也能保持时间。
clock [选项]
hwclock命令| 参数 | 说明 |
|---|---|
-a, --adjust |
根据上次时钟调整的记录自动调整硬件时钟 |
--debug |
显示调试信息 |
-h, --hctosys |
将硬件时钟时间设置到系统时间 |
-r, --show |
读取并显示硬件时钟时间(默认行为) |
-s, --hctosys |
同-h,将硬件时钟时间设置到系统时间 |
-S, --systohc |
将系统时间设置到硬件时钟 |
-u, --utc |
硬件时钟使用UTC时间(默认) |
--localtime |
硬件时钟使用本地时间 |
-v, --version |
显示版本信息 |
-w, --systohc |
同-S,将系统时间设置到硬件时钟 |
--set --date=日期时间 |
设置硬件时钟为指定时间 |
--test |
测试模式,不实际修改时钟 |
查看当前硬件时钟时间:
# 显示硬件时钟时间
$ sudo clock
Sun Mar 10 15:30:45 2024 -0.123456 seconds
# 或者使用-r参数
$ sudo clock -r
Sun Mar 10 15:30:45 2024 -0.123456 seconds
将硬件时钟设置为当前系统时间:
# 将系统时间写入硬件时钟
$ sudo clock -w
# 或者使用-S参数
$ sudo clock -S
# 验证
$ sudo clock -r
$ date
用硬件时钟时间设置系统时间:
# 从硬件时钟读取时间设置系统时间
$ sudo clock -s
# 或者使用-h参数
$ sudo clock -h
# 验证
$ date
$ sudo clock -r
手动设置硬件时钟:
# 设置硬件时钟为特定时间
$ sudo clock --set --date="2024-03-10 15:30:00"
# 验证设置
$ sudo clock -r
Sun Mar 10 15:30:00 2024 0.000000 seconds
指定硬件时钟使用UTC或本地时间:
# 设置硬件时钟使用UTC时间(默认)
$ sudo clock -u
# 设置硬件时钟使用本地时间
$ sudo clock --localtime
# 查看当前设置
$ sudo cat /etc/adjtime
# 第一行包含"UTC"或"LOCAL"
根据记录自动调整硬件时钟:
# 自动调整硬件时钟
$ sudo clock -a
# 这个命令会读取/etc/adjtime文件中的调整记录
# 并相应调整硬件时钟
在不实际修改的情况下测试命令:
# 测试同步操作,不实际执行
$ sudo clock --test -w
Would set hardware clock to Sun Mar 10 15:35:00 2024
# 测试显示操作
$ sudo clock --test -r
Would show hardware clock: Sun Mar 10 15:35:00 2024
查看和修改时钟调整记录文件:
# 查看时钟调整记录
$ cat /etc/adjtime
0.000000 1709999999 0.000000
UTC
# 文件格式说明:
# 第一行:平均每天偏差 上次调整时间戳 剩余调整时间
# 第二行:UTC或LOCAL
# 第三行(可选):未知
# 手动修改调整记录(谨慎操作)
$ echo "0.123456 1709999999 0.0" > /etc/adjtime
$ echo "UTC" >> /etc/adjtime
由于clock已过时,使用hwclock的等效命令:
# 查看clock和hwclock的关系
$ ls -l /sbin/clock
lrwxrwxrwx 1 root root 7 Jan 15 2020 /sbin/clock -> hwclock
# 使用hwclock的等效命令
$ sudo hwclock --show # 同 clock -r
$ sudo hwclock --systohc # 同 clock -w
$ sudo hwclock --hctosys # 同 clock -s
$ sudo hwclock --set --date="2024-03-10 15:30:00" # 同 clock --set
$ sudo hwclock --adjust # 同 clock -a
ntpd或chronyd同步到网络时间服务器# 双系统时间解决方案(让Windows使用UTC)
# 在Windows中以管理员身份运行:
# reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1
# 或者让Linux使用本地时间
$ sudo clock --localtime
$ sudo hwclock --localtime
A: date命令管理系统时间(软件时钟),clock命令管理硬件时钟(RTC)。系统时间在关机后丢失,硬件时钟由电池供电持续运行。
A: 硬件时钟可能有漂移。可以使用clock -a自动调整,或手动调整/etc/adjtime文件中的漂移值。
A: 如果系统每次启动时间都重置到过去某个时间,很可能是CMOS电池耗尽。在BIOS/UEFI设置中可以看到时钟状态。
A: Windows默认使用本地时间,Linux默认使用UTC。可以统一为UTC时间(修改Windows注册表),或统一为本地时间(在Linux中设置--localtime)。
A: 修改系统时间后,如果不同步到硬件时钟,重启后系统会从硬件时钟读取旧的时间。
hwclock - 硬件时钟工具(clock的现代替代)date - 显示和设置系统时间timedatectl - 系统时间和时区管理工具(systemd系统)ntpdate - 从NTP服务器设置时间chronyc - chrony时间同步客户端adjtimex - 调整内核时间参数rdate - 从远程服务器获取时间