如何在 Linux 上使用 timedatectl 命令

已发表: 2022-06-16
几个挂钟挤在一起,都显示着不同的时间。
POR666/Shutterstock.com

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

都是相对的

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

什么是 Unix 纪元,以及 Unix 时间如何工作?
相关什么是 Unix 纪元,以及 Unix 时间如何工作?

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

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

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

广告

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

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

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

为什么 Linux 的 systemd 经过这么多年仍然存在分歧
相关为什么 Linux 的 systemd 经过这么多年仍然存在分歧

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

开始使用 timedatectl

要查看当前数据和时间以及其他值,请使用带有status运算符的timedatectl命令。

 时间日期控制状态

使用状态运算符的 timedatectl 命令的输出

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

 时间日期ctl 

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

两组输出显示:

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

您可以通过键入以下内容查看timedatectl命令支持多少个时区:

 timedatectl 列表时区 | wc -l 

计算 timedatectl 时区

广告

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

 timedatectl 列表时区 | grep "美国/" | 较少的

用 grep 过滤掉美国时区

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

“美国”时区列表在less

设置时区

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

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

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

 timedatectl set-timezone "美国/埃德蒙顿"
 时间日期ctl 

新时区和时间设置

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

相关:如何在 Linux 上使用管道

手动设置时间和日期

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

 timedatectl 设置时间 10:30:00 

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

广告

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

 sudo systemctl stop systemd-timesyncd.service

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

 timedatectl 设置时间“2022-01-30 10:30:00”

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

 时间日期ctl 

手动设置时间和日期

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

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

 sudo systemctl start systemd-timesyncd.service
 时间日期ctl 

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

RTC:UTC 还是 LTZ?

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

广告

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

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

 timedatectl set-local-rtc 1

然后我们将询问timedatectl的状态。

 时间日期ctl 

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

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

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

 timedatectl set-local-rtc 0

设置并忘记它

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

广告

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

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

相关:如何将您的 Linux 服务器时间与网络时间服务器 (NTP) 同步