⚠️ 注意:clock命令已过时

clock命令在现代Linux发行版中已过时,建议使用hwclock命令。许多系统中clockhwclock的符号链接。

linux clock命令

clock命令用于读取和设置硬件时钟(RTC,Real Time Clock),以及同步系统时间和硬件时间。硬件时钟是计算机主板上的独立时钟,即使计算机关机也能保持时间。

语法格式

clock [选项]

命令功能

  • 显示当前硬件时钟时间
  • 设置硬件时钟时间
  • 将系统时间同步到硬件时钟
  • 将硬件时钟时间同步到系统时间
  • 调整硬件时钟的时区设置

📝 重要说明

  • 硬件时钟(RTC)是主板上的独立时钟,由电池供电
  • 系统时间是Linux内核维护的软件时钟
  • 需要root权限才能修改硬件时钟
  • 硬件时钟通常存储为UTC时间,由操作系统转换为本地时间
  • 现代系统建议使用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 测试模式,不实际修改时钟

常用示例

示例1:显示硬件时钟时间

查看当前硬件时钟时间:

# 显示硬件时钟时间
$ 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

示例2:硬件时钟同步到系统时间

将硬件时钟设置为当前系统时间:

# 将系统时间写入硬件时钟
$ sudo clock -w

# 或者使用-S参数
$ sudo clock -S

# 验证
$ sudo clock -r
$ date

示例3:系统时间同步到硬件时钟

用硬件时钟时间设置系统时间:

# 从硬件时钟读取时间设置系统时间
$ sudo clock -s

# 或者使用-h参数
$ sudo clock -h

# 验证
$ date
$ sudo clock -r

示例4:设置硬件时钟为指定时间

手动设置硬件时钟:

# 设置硬件时钟为特定时间
$ sudo clock --set --date="2024-03-10 15:30:00"

# 验证设置
$ sudo clock -r
Sun Mar 10 15:30:00 2024  0.000000 seconds

示例5:时区设置

指定硬件时钟使用UTC或本地时间:

# 设置硬件时钟使用UTC时间(默认)
$ sudo clock -u

# 设置硬件时钟使用本地时间
$ sudo clock --localtime

# 查看当前设置
$ sudo cat /etc/adjtime
# 第一行包含"UTC"或"LOCAL"

示例6:自动调整时钟

根据记录自动调整硬件时钟:

# 自动调整硬件时钟
$ sudo clock -a

# 这个命令会读取/etc/adjtime文件中的调整记录
# 并相应调整硬件时钟

示例7:测试模式

在不实际修改的情况下测试命令:

# 测试同步操作,不实际执行
$ 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

示例8:查看时钟调整记录

查看和修改时钟调整记录文件:

# 查看时钟调整记录
$ cat /etc/adjtime
0.000000 1709999999 0.000000
UTC

# 文件格式说明:
# 第一行:平均每天偏差 上次调整时间戳 剩余调整时间
# 第二行:UTC或LOCAL
# 第三行(可选):未知

# 手动修改调整记录(谨慎操作)
$ echo "0.123456 1709999999 0.0" > /etc/adjtime
$ echo "UTC" >> /etc/adjtime

示例9:使用hwclock替代命令

由于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

⚠️ 注意事项

  1. 权限要求:修改硬件时钟需要root权限
  2. 时间格式:硬件时钟通常以24小时制存储
  3. 时区问题:确保硬件时钟和系统时区设置一致
  4. 双系统:Windows通常使用本地时间,Linux使用UTC,双系统需注意兼容性
  5. 过时命令:clock命令已过时,建议使用hwclock

💡 实用技巧

  1. 双系统时间同步:如果同时使用Windows和Linux,让Windows使用UTC时间或Linux使用本地时间
  2. 自动同步:可以设置cron任务定期同步硬件时钟和系统时间
  3. 检查时钟漂移:定期检查硬件时钟的漂移情况并调整
  4. 网络时间同步:使用ntpdchronyd同步到网络时间服务器
  5. 硬件故障:如果时间频繁丢失,可能是主板电池需要更换
# 双系统时间解决方案(让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

常见问题

Q: clock和date命令有什么区别?

A: date命令管理系统时间(软件时钟),clock命令管理硬件时钟(RTC)。系统时间在关机后丢失,硬件时钟由电池供电持续运行。

Q: 硬件时钟为什么比系统时间慢/快?

A: 硬件时钟可能有漂移。可以使用clock -a自动调整,或手动调整/etc/adjtime文件中的漂移值。

Q: 如何检查硬件时钟电池状态?

A: 如果系统每次启动时间都重置到过去某个时间,很可能是CMOS电池耗尽。在BIOS/UEFI设置中可以看到时钟状态。

Q: 双系统时间不一致怎么办?

A: Windows默认使用本地时间,Linux默认使用UTC。可以统一为UTC时间(修改Windows注册表),或统一为本地时间(在Linux中设置--localtime)。

Q: 为什么修改时间后需要同步硬件时钟?

A: 修改系统时间后,如果不同步到硬件时钟,重启后系统会从硬件时钟读取旧的时间。

相关命令

  • hwclock - 硬件时钟工具(clock的现代替代)
  • date - 显示和设置系统时间
  • timedatectl - 系统时间和时区管理工具(systemd系统)
  • ntpdate - 从NTP服务器设置时间
  • chronyc - chrony时间同步客户端
  • adjtimex - 调整内核时间参数
  • rdate - 从远程服务器获取时间