菜鸟科技网

Linux授时命令有哪些?如何同步时间?

在Linux系统中,时间同步是保障系统日志、任务调度、安全认证等正常运行的关键环节,Linux提供了多种授时命令,用于查看、设置和同步系统时间,这些命令涵盖从基础时间查看到高精度网络时间同步的多种场景,以下将详细介绍常用的Linux授时命令,包括其功能、参数及使用示例。

Linux授时命令有哪些?如何同步时间?-图1
(图片来源网络,侵删)

基础时间查看与设置命令

date命令

date是最基础的时间查看和设置命令,用于显示或修改系统的日期和时间。

  • 功能:显示当前系统时间,或根据参数设置时间格式。

  • 常用参数

    • -d:显示指定字符串描述的时间(如date -d "2023-10-01 12:00:00")。
    • -s:设置系统时间(需root权限,如date -s "20231001 12:00:00")。
    • 自定义时间格式(如date +"%Y-%m-%d %H:%M:%S"显示年-月-日 时:分:秒)。
  • 示例

    Linux授时命令有哪些?如何同步时间?-图2
    (图片来源网络,侵删)
    # 显示当前时间(默认格式)
    date
    # 输出:2023年10月01日 星期日 12:00:00 CST
    # 显示Unix时间戳
    date +%s
    # 输出:1696118400
    # 设置系统时间为2023年10月1日12点
    sudo date -s "20231001 120000"

hwclock命令

hwclock用于查看或修改硬件时钟(BIOS/UEFI时间),硬件时钟在系统关闭后仍会运行,确保开机时能正确读取时间。

  • 功能:同步系统时间与硬件时间,或直接操作硬件时钟。

  • 常用参数

    • --show:显示当前硬件时间(默认参数)。
    • --set:设置硬件时间(需配合--date参数)。
    • --hctosys:将硬件时间同步到系统时间。
    • --systohc:将系统时间同步到硬件时间(推荐关机前执行)。
  • 示例

    Linux授时命令有哪些?如何同步时间?-图3
    (图片来源网络,侵删)
    # 查看硬件时间
    hwclock --show
    # 输出:2023-10-01 12:00:00.000000+0800
    # 将系统时间同步到硬件时间
    sudo hwclock --systohc
    # 设置硬件时间为2023年10月1日12点
    sudo hwclock --set --date="2023-10-01 12:00:00"

网络时间同步命令

对于需要高精度时间同步的场景(如服务器、金融系统),需通过网络时间协议(NTP)同步时间,Linux中常用的NTP工具包括ntpdatentpqchrony

ntpdate命令

ntpdate是简单的NTP时间同步工具,通过向NTP服务器发送请求来调整系统时间。

  • 功能:从NTP服务器同步时间,适用于一次性快速同步。

  • 常用参数
    -u:使用UDP协议(默认)。
    -q:仅查询不调整时间。

  • 示例

    # 从 pool.ntp.org 同步时间(需root权限)
    sudo ntpdate -u pool.ntp.org
    # 查询指定服务器的时间偏差
    ntpdate -q cn.pool.ntp.org
    # 输出:server 120.25.115.20, stratum 2, offset 0.002328, delay 0.04543

ntpq命令

ntpq是NTP查询工具,用于监控NTP服务器的状态和同步信息。

  • 功能:查看NTP服务器连接状态、时间偏差、同步源等。
  • 常用参数
    -p:显示NTP服务器列表及同步状态(表示当前同步源)。
  • 示例
    # 查看NTP服务器同步状态
    ntpq -p
    # 输出:
    # remote           refid      st t when poll reach   delay   offset  jitter
    # *ntp.aliyun.com .PPS.          1 u  460 1024  377    0.123    -0.456  0.001
    # +time.cloudflare .INIT.        16 u  512 1024    0    0.000    0.000  0.000

    说明refid为参考时钟标识,st为stratum层级(越小越权威),delay为网络延迟,offset为时间偏差(绝对值越小越好)。

chrony工具

chrony是新一代NTP客户端/服务器,适用于网络不稳定或高精度场景(如虚拟机、容器),比传统ntpd启动更快、同步更精准。

  • 核心组件
    • chronyd:后台服务,负责同步时间。
    • chronyc:命令行工具,用于监控和控制chronyd
  • 常用操作
    • 安装(Ubuntu/Debian):
      sudo apt install chrony
    • 配置:编辑/etc/chrony/chrony.conf,添加或修改NTP服务器(如server pool.ntp.org iburst)。
    • 启动服务
      sudo systemctl start chronyd
      sudo systemctl enable chronyd
    • 监控同步状态
      chronyc tracking  # 查看同步源和时间偏差
      chronyc sources   # 显示NTP服务器列表
    • 手动同步
      chronyc -a makestep  # 强制同步时间(需root权限)

时区管理命令

Linux系统时区通过/etc/localtime文件或/usr/share/zoneinfo/下的时区文件控制,常用命令包括timedatectltzselect

timedatectl命令

timedatectl是systemd工具,用于管理系统时间和时区(推荐使用)。

  • 功能:设置时区、启用/禁用NTP同步、查看时间状态。

  • 常用参数
    set-timezone:设置时区(如sudo timedatectl set-timezone Asia/Shanghai)。
    set-ntp:启用/禁用NTP同步(如sudo timedatectl set-ntp true)。
    status:显示当前时间状态(默认参数)。

  • 示例

    # 查看时间状态
    timedatectl status
    # 输出:本地时间:2023-10-01 12:00:00 CST
    #        UTC时间:2023-10-01 04:00:00 UTC
    #        时区:Asia/Shanghai (CST, +0800)
    #        NTP服务:启用
    # 设置时区为纽约
    sudo timedatectl set-timezone America/New_York

tzselect命令

tzselect是交互式时区设置工具,通过问答方式选择时区。

  • 示例
    tzselect
    # 按提示选择:亚洲(Asia)-> 中国(China)-> 北京(Beijing)
    # 完成后会生成新的时区文件,需手动执行:
    sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

常用授时命令对比

命令 主要功能 权限要求 适用场景
date 查看/设置系统时间 普通用户(设置需root) 临时查看或调整时间
hwclock 同步/查看硬件时钟 root 硬件时间与系统时间同步
ntpdate 从NTP服务器一次性同步时间 root 快速同步,无需长期运行服务
ntpq 查看NTP服务器状态 普通用户 监控NTP同步情况
chronyc 管理chronyd服务,高精度同步 root 服务器、虚拟机等高精度场景
timedatectl 管理时间、时区、NTP服务 root 现代Linux系统(systemd)

相关问答FAQs

问题1:为什么使用chrony而不是传统的ntpd进行时间同步?
解答:chrony相比ntpd具有以下优势:

  1. 启动更快chronyd在系统启动后几秒内即可开始同步时间,而ntpd需要较长时间收集样本。
  2. 网络适应性更强:在网络不稳定或高延迟场景(如虚拟机、跨地域同步)下,chrony能更快调整时间偏差。
  3. 支持更高精度chrony支持硬件时间戳(如通过PTP协议),可达到亚微秒级同步精度,而ntpd通常为毫秒级。
  4. 资源占用更低chronyd内存和CPU占用更少,适合资源受限设备。

问题2:如何确保Linux系统时间在重启后不丢失?
解答:系统时间重启后丢失通常是因为硬件时钟(RTC)未正确同步,解决方法如下:

  1. 同步系统时间到硬件时钟:在关机或重启前,执行命令sudo hwclock --systohc,将当前系统时间写入硬件时钟。
  2. 检查硬件时钟状态:使用hwclock --show确认硬件时间与系统时间一致。
  3. 启用NTP服务自动同步:通过sudo timedatectl set-ntp true(使用chronysystemd-timesyncd)或sudo systemctl enable ntpd(使用ntpd),确保系统启动后自动从NTP服务器同步时间,并定期更新硬件时钟。
  4. 验证硬件时钟电池:若硬件时间在关机后仍丢失,可能是主板电池电量不足,需更换CMOS电池。
分享:
扫描分享到社交APP
上一篇
下一篇