第 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”。