Linux 7中timedatectl命令

timedatectl是用来查询和修改系统时间和配置的Linux应用程序。它是systemd 系统服务管理的一部分,并且允许你检查和修改系统时钟的配置。

参考:redhat手册部分

几个时钟的定义

  • 实时时钟(real-time clock RTC or CMOS)

指定的是硬件时钟,一般是主板上的特殊电路,专用用于记录时候,有电池供电,不受服务器的开启关闭,操作系统的关闭开启影响。无法保存时间标准(UTC 或 localtime)和是否使用夏令时调节。

  • 系统时钟

与硬件时间分别维护,保存了:时间、时区和夏令时设置。Linux 内核保存为自 UTC 时间 1970 年1月1日经过的秒数。初始系统时钟是从硬件时间计算得来,计算时会考虑/etc/adjtime的设置。系统启动之后,系统时钟与硬件时钟独立运行,Linux 通过时钟中断计数维护系统时钟。
因为系统时间是按 32 为整数保存的,最大只能记到 2038 年,所以 32 位 Linux 系统将在 2038 年停止工作。

  • 国际统一时钟(Coordinated Universal Time or UTC)

UTC 是与时区无关的全球时间标准。尽管概念上有差别,UTC 和 GMT (格林威治时间) 是一样的。localtime 标准则依赖于当前时区。系统时间永远是UTC,在应用程序使用的时候转换为本地时间,本地时间实际就是自己的时区,包括夏令时,RTC实战可以是UTC会在本地时间,一般UTC是被支持的方式。

timedatectl 使用

  • 查看命令帮助
    #
    timedatectl --help
    timedatectl [OPTIONS...] COMMAND ...

    Query or change system time and date settings.

    -h --help Show this help
    --version Show package version
    --adjust-system-clock
    Adjust system clock when changing local RTC mode
    --no-pager Do not pipe output into a pager
    -P --privileged Acquire privileges before execution
    --no-ask-password Do not prompt for password
    -H --host=[USER@]HOST Operate on remote host

    Commands:
    status Show current time settings
    set-time TIME Set system time
    set-timezone ZONE Set system timezone
    list-timezones Show known timezones
    set-local-rtc BOOL Control whether RTC is in local time
    set-ntp BOOL Control whether NTP is enabled

更详细的帮助信息也可以通过man timedatectl 进行查看。

查看当前设置,直接输入timedatectl等同于timedatectl status

#
timedatectl
Local time: Fri 2015-10-23 21:07:39 EDT
Universal time: Sat 2015-10-24 01:07:39 UTC
RTC time: Sat 2015-10-24 01:05:41
Timezone: America/New_York (EDT, -0400)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2015-03-08 01:59:59 EST
Sun 2015-03-08 03:00:00 EDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2015-11-01 01:59:59 EDT
Sun 2015-11-01 01:00:00 EST
  • 设置日期
#
timedatectl set-time YYYY-MM-DD
  • 设置当前时间
#
timedatectl set-time HH:MM:SS

默认的,系统是使用UTC时间的,可以用以下命令打开和关闭UTC时间:

#
timedatectl set-local-rtc boolean

把 boolean 替换成yes则表示使用本地时间,替换成no则表示是UTC时间

注:这里的boolean值也可以用true、flase

  • 设置时区:

查看所有的时区:

#
timedatectl list-timezones|grep Shanghai
Asia/Shanghai

用以下命令设置时区:

#
timedatectl set-timezone Asia/Shanghai
  • 远程NTP服务器同步

timedatectl还可以设置是否打开NTP选项

#
timedatectl set-ntp yes(or)no