如何在 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) 同步