怎样在 Linux 上使用 timedatectl 命令

Linux的 timedatectl 命令允许您为系统时钟和实时时钟设置时间、日期和时区。 稍等片刻,我们将向您展示这一切是怎样运作的。

都是相对的

您的计算机对时间的处理是您可能期望非常简单的事情之一。 至少,直到你开始研究它。

Linux 系统时钟计算自 Unix 纪元以来的秒数。 这是 1970 年 1 月 1 日 00:00:00,UTC。 UTC 代表世界协调时间,但它通常被称为协调世界时或只是世界时。 这是世界管理和调节时间的时间标准。 不同的时区对 UTC 应用偏移量以获得它们的本地时间。 一些时区领先于 UTC,而其他时区则落后于它。

Linux 计算机中的系统时钟是基于软件的。 显然,它在计算机断电时无法运行。 另一个时钟,一个由电池支持的基于硬件的实时时钟,能够在计算机关闭时运行。 它的目的是在 Linux 启动时告诉系统时钟现在是什么时间。 除非可以访问网络时间协议 (NTP) 服务器。

NTP 服务器是向请求它的计算机提供准确时间信息的服务器。 如果您启动您的计算机或笔记本电脑并且没有互联网访问 – 或者尚未配置为使用 NTP 服务器 – 实时时钟将用于启动系统时钟而不是 NTP 服务器。


系统时钟始终采用 UTC。 任何需要获取本地时间的应用程序都需要:

  • 访问系统时钟并获取UTC
  • 知道它在哪个时区并应用正确的偏移量
  • 考虑夏令时是否有效

从 UTC 到本地时间的转换由应用程序完成,而不是系统时钟。 或者,更准确地说,转换是由应用程序链接到的时间和日期库执行的。 这就是为什么您的计算机必须知道它所在的时区、UTC 时间、自 Unix 纪元以来已经过去了多少秒以及夏令时是否有效的原因。

在基于 systemd 的 Linux 发行版上,我们使用 timedatectl 命令以查看或更改这些设置和值。

开始使用 timedatectl

要查看当前数据和时间以及其他值,请使用 timedatectl 命令与 status 操作员。

timedatectl status

实际上,您可以删除状态,您仍然会得到相同的输出。

timedatectl

没有操作符的 timedatectl 命令的输出

两组输出显示:

  • 当地时间:计算机认为的时间,根据其时区。
  • 世界时:UTC时间。
  • 实时时钟时间:实时时钟使用的时间。 通常,这是 UTC。
  • 时区:有关已配置时区的信息。
  • 系统时钟同步:系统时钟是否与NTP服务器同步。
  • NTP服务:计算机的 NTP 服务是否处于活动状态。
  • 本地 TZ 中的 RTC:实时时钟是否使用本地时间而不是UTC。

你可以看到有多少个时区 timedatectl 命令支持通过键入:

timedatectl list-timezones | wc -l

计算 timedatectl 时区


这比现在更多 世界时区. 如果我们将输出通过管道传输到 grep 并过滤掉“America”的条目并将其输入 less,我们可以滚动浏览一个更易于管理的列表。

timedatectl list-timezones | grep "America/" | less

用 grep 过滤掉美国时区

当您查看该列表时,您会看到“美国”被认为具有最广泛的含义。 您会注意到的第二件事是大多数条目不是实际的时区。

“美国”时区列表在less

设置时区

如果您查看未过滤的时区列表 timedatectl 您会看到地点和时区。 要设置时区,您可以通过名称指定它,例如 EST 或 GMT,或者您可以选择与您在同一时区的位置,例如伦敦或纽约。

重置您的时区不是您经常要做的事情,但也许您已经搬家或者您正在工作一段时间并且想要本地化您的笔记本电脑。 如果您需要重置时区,请在您要使用的时区中选择一个位置。

我们将此计算机设置为山区时间,与埃德蒙顿时区相同。 然后我们将看到设置是怎样改变的。

timedatectl set-timezone "America/Edmonton"
timedatectl

新时区和时间设置

我们的时区已更改,我们的本地时间已更改,并且与 UTC 的偏移量已增加。

怎样在 Linux 上使用管道

手动设置时间和日期

虽然可以手动设置时间和日期,但通常不需要。 使用时间同步和 NTP 是保持计算机时间和日期准确的首选方式。 如果您尝试更改计算机的日期或时间,您可能会收到错误消息,告诉您时间同步正在使用中。

timedatectl set-time 10:30:00

错误消息,因为时间同步有效


使用此命令关闭时间同步服务:

sudo systemctl stop systemd-timesyncd.service

您可以使用 timedatectl 设定时间运算符。 日期按年-月-日顺序 YYY-MM-DD,时间按时-分-秒顺序 HH:MM:SS。 我们将使用以下命令设置时间和日期:

timedatectl set-time "2022-01-30 10:30:00"

然后我们将检查更改是否已经发生,使用 timedatectl.

timedatectl

手动设置时间和日期

日期和时间已更改。 另外,请注意计算机使用的是错误的 UTC 时间。 我们还被告知系统时钟未同步,NTP 服务处于非活动状态。

如果您可以访问互联网,只要您恢复时间同步服务,时间就会被检索,并且所有详细信息都会正确重置。

sudo systemctl start systemd-timesyncd.service
timedatectl

重新启动 NTP 服务并恢复正确的时间值

RTC:UTC 还是 LTZ?

可以将您的实时时钟设置为您当地的时区时间,而不是 UTC — 可能,但不建议。 如果您进行更改,您将看到一个警告,说明这可能对您的系统产生严重影响。


向您展示此方法的原因是您可能会遇到一台机器,他们的时间设置存在奇怪的问题。 这是怎样将实时时钟设置回 UTC。

首先,我们需要将其设置为本地时区。

timedatectl set-local-rtc 1

然后我们会问 timedatectl 为其地位。

timedatectl

将实时时钟设置为当地时区,以及随之而来的警告

我认为他们已经表达了他们的感受。

要将实时时钟恢复为 UTC,请使用以下命令:

timedatectl set-local-rtc 0

设置并忘记它

除非您在安装 Linux 发行版时出错,或者您重新定位,否则通常没有理由修改系统和实时时钟的设置。


将系统时钟设置为您的时区,将实时时钟设置为 UTC,并确保您的系统正在轮询网络时间协议服务器。 这是大多数安装后的默认状态。

如果它们都设置好了,您的计算机的时间系统将自行处理。

怎样将您的 Linux 服务器时间与网络时间服务器 (NTP) 同步