第 3 章 配置日期和时间
现代操作系统区分以下两种时钟:
- 实时时钟 (RTC ),通常称为硬件时钟(通常是系统板上的集成电路),完全独立于操作系统的当前状态并在计算机关机时运行。
- 系统时钟 (也称为软件时钟 )由内核维护,其初始值基于实时时钟。引导系统且系统时钟初始化后,系统时钟就完全独立于实时时钟。
系统时间始终保持在统一世界时间 (UTTC)中,并根据需要在应用程序中转换为本地时间。本地时间是当前时区的实际时间 ,考虑到夏天节省时间 (DST)。实时时钟可以使用 UTC 或本地时间。建议 UTC。
Red Hat Enterprise Linux 7 提供了三个命令行工具,可用于配置和显示有关系统日期和时间的信息:
-
timedatectl工具,它是 Red Hat Enterprise Linux 7 中的新功能,是systemd的一部分。 -
传统的
date命令. -
用于访问硬件时钟的 The
hwclock实用程序.
3.1. 使用 timedatectl 命令 复制链接链接已复制到粘贴板!
timedatectl 工具作为 systemd 系统和服务管理器的一部分发布,可让您查看和更改系统时钟的配置。您可以使用此工具更改当前的日期和时间,设置时区,或者启用与远程服务器自动同步系统时钟。
有关如何以自定义格式显示当前日期和时间的详情,请参考 第 3.2 节 “使用 date 命令”。
3.1.1. 显示当前日期和时间 复制链接链接已复制到粘贴板!
要显示当前的日期和时间,以及有关系统和硬件时钟配置的详细信息,请在没有附加命令行选项的情况下运行 timedatectl 命令:
timedatectl
这会显示本地和通用时间、当前使用的时区、网络时间协议(NTP)配置的状态,以及与 DST 相关的其他信息。
例 3.1. 显示当前日期和时间
以下是一个不使用 NTP 将系统时钟与远程服务器同步的系统中 timedatectl 命令的输出示例:
~]$ timedatectl
Local time: Mon 2016-09-16 19:30:24 CEST
Universal time: Mon 2016-09-16 17:30:24 UTC
Timezone: Europe/Prague (CEST, +0200)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2016-03-31 01:59:59 CET
Sun 2016-03-31 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2016-10-27 02:59:59 CEST
Sun 2016-10-27 02:00:00 CET
timedatectl 不会立即注意到对 chrony 或 ntpd 状态的更改。如果更改了这些工具的配置或状态,请输入以下命令:
~]# systemctl restart systemd-timedated.service
3.1.2. 更改当前时间 复制链接链接已复制到粘贴板!
要更改当前时间,以 root 用户身份在 shell 提示符后输入以下内容:
timedatectl set-time HH:MM:SS
将 HH 替换为一小时,MM 替换为一分钟,SS 替换为秒,全部以两位数形式键入。
此命令同时更新系统时间和硬件时钟。结果类似于使用 date --set 和 hwclock --systohc 命令。
如果启用了 NTP 服务,该命令将失败。请参阅 第 3.1.5 节 “将系统时钟与远程服务器同步” 以临时禁用该服务。
例 3.2. 更改当前时间
要将当前时间更改为 11:26,以 root 用户身份运行以下命令:
~]# timedatectl set-time 23:26:00
默认情况下,系统配置为使用 UTC。要将您的系统配置为在本地时间维护时钟,以 root 用户身份使用 set-local-rtc 选项运行 timedatectl 命令:
timedatectl set-local-rtc boolean
要将您的系统配置为在本地时间维护时钟,请将 布尔值 替换为 yes (或者 y、y、true、t 或 1)。要将系统配置为使用 UTC,请将 布尔值 替换为 no (或者 n、n、false、f 或 0)。默认选项为 no。
3.1.3. 更改当前日期 复制链接链接已复制到粘贴板!
要更改当前日期,以 root 用户身份在 shell 提示符后输入以下内容:
timedatectl set-time YYYY-MM-DD
将 YYY 替换为四位数年,MM 替换为两位数月,DD 替换为每月的两位数。
请注意,在不指定当前时间的情况下更改日期会导致将时间设置为 00:00:00。
例 3.3. 更改当前日期
要将当前日期更改为 2017 年 6 月 2 日并保留当前时间(下午 11:26),以 root 用户身份运行以下命令:
~]# timedatectl set-time "2017-06-02 23:26:00"
3.1.4. 更改时区 复制链接链接已复制到粘贴板!
要列出所有可用时区,在 shell 提示符后输入以下内容:
timedatectl list-timezones
要更改当前使用的时区,以 root 用户身份输入 :
timedatectl set-timezone time_zone
使用 time datectl list-timezones 命令列出的任何值替换 time _zone。
例 3.4. 更改时区
要确定哪一个时区与您当前位置最接近,请使用 timedatectl 命令和 list-timezones 命令行选项。例如,要列出欧洲所有可用时区,请输入:
~]# timedatectl list-timezones | grep Europe
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
…
要将时区更改为 欧洲/地区, 以 root 用户身份输入 :
~]# timedatectl set-timezone Europe/Prague
3.1.5. 将系统时钟与远程服务器同步 复制链接链接已复制到粘贴板!
与前面部分所述的手动调整不同,timedatectl 命令还允许您使用 NTP 协议自动与一组远程服务器同步系统时钟。启用 NTP 可启用 chronyd 或 ntpd 服务,具体取决于安装了哪些服务。
使用以下命令可以启用或禁用 NTP 服务:
timedatectl set-ntp boolean
要让您的系统能够将系统时钟与远程 NTP 服务器同步,请将 布尔值 替换为 yes (默认选项)。要禁用此功能,请将 布尔值 替换为 no。
例 3.5. 将系统时钟与远程服务器同步
要启用与远程服务器自动同步系统时钟,请输入:
~]# timedatectl set-ntp yes
如果未安装 NTP 服务,命令将失败。如需更多信息,请参阅 第 18.3.1 节 “安装 chrony”。