管理時區和時間:timedatectl
指令
1. 在 Linux 中處理時間
為什麼設定正確的時間這麼重要?
想像一下,你試圖在系統日誌中追蹤錯誤,但日誌中的時間與實際時間對不上。或者更糟的是,你的國際企業伺服器對不同用戶顯示了不同的時間。正確設置時間不只是方便而已:這對系統運作、文件同步、安全維護(SSL 憑證依賴於時間)以及工作任務協調來說至關重要。
在 Linux 中,時間可以有兩種形式:
- 系統時間 (System Time) — 作業系統用於自身任務的時間。
- 硬體時間 (Hardware Time) — 存在於硬體層面 (BIOS/UEFI)。
我們將使用工具 timedatectl
來處理系統時間。
2. timedatectl
指令基礎
timedatectl
是一個命令工具,提供了一個方便的介面來管理時間。它允許您:
- 檢查當前的時間和時區設定;
- 設置系統和硬體的時間;
- 配置時區;
- 開啟或關閉 NTP(Network Time Protocol)的時間同步功能。
檢查當前時間
我們從最簡單的開始。要檢查當前時間和設定,執行以下命令:
timedatectl
範例輸出:
Local time: Tue 2023-10-31 12:34:56 MSK
Universal time: Tue 2023-10-31 09:34:56 UTC
RTC time: Tue 2023-10-31 09:34:56
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
字段解釋:
- Local time: 本地(系統)時間。
- Universal time: UTC 格式的時間(協調世界時)。
- RTC time: 硬體時間(BIOS/UEFI 層級)。
- Time zone: 當前時區。
- System clock synchronized: 是否通過 NTP 同步時鐘。
- NTP service: 是否激活時間同步服務。
- RTC in local TZ: 硬體時間是否與本地時區相符。
設置與更改時區
有時候,在搬家或專案需求變更後,可能需要更改時區。例如,您的伺服器最初設定在紐約,但現在需要服務於位於莫斯科的使用者。時區資訊可以在目錄 /usr/share/zoneinfo
中找到。
要查看可用的時區,執行下列命令:
timedatectl list-timezones
輸出的將是一個巨大的列表,例如:
Africa/Abidjan
America/New_York
Asia/Tokyo
Europe/Moscow
可以使用下面的命令來設定新的時區:
sudo timedatectl set-timezone Europe/Moscow
檢查時區是否已更改:
timedatectl
實踐任務
- 找出您的伺服器當前的時區。
- 將時區切換到 UTC。
- 將時區切回到您的本地時區。
3. 手動設定時間
雖然現代伺服器通常通過 NTP 進行時間同步,但有時需要手動設定時間。如果伺服器處於無法訪問網路的隔離網路中,這會很有用。
首先,你可以檢查當前的系統時間:
date
可以使用以下指令設定新的時間:
sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
例如,要將時間設定為 2023 年 11 月 1 日,12:00:
sudo timedatectl set-time "2023-11-01 12:00:00"
現在再次檢查結果:
timedatectl
設定硬體時間
硬體時間(也被稱為 RTC — Real-Time Clock)是在 BIOS/UEFI 層級管理的。如果硬體時間與系統時間不同步,可能會在重新啟動時引發問題。要進行同步,執行以下指令:
sudo hwclock --systohc
這個指令會將硬體時間設定為與系統時間一致。
如果你需要做相反的操作(將系統時間與硬體時間同步),請使用:
sudo hwclock --hctosys
4. 通過 NTP 同步時間
通過 NTP 同步時間是使用遠端伺服器自動保持準確時間的方法。在大多數現代 Linux 發行版中,NTP 默認是啟用的。
檢查 NTP 設置
執行以下操作:
timedatectl status
如果 NTP 被關閉(NTP service 行顯示 inactive
),啟用它:
sudo timedatectl set-ntp true
要關閉 NTP,執行以下操作:
sudo timedatectl set-ntp false
如果 NTP 未運行,請確保相關服務處於啟用狀態。例如,在使用 systemd-timesyncd
的系統中,請確保服務是啟用的:
sudo systemctl status systemd-timesyncd
5. 實際練習
任務
- 把系統時區設置為 UTC。
- 手動將系統時間設置為 2023 年 11 月 1 日,12:00:00。
- 啟用透過 NTP 的時間同步。
檢查
完成任務後,請確認以下內容:
- 你的系統時間符合設置的參數。
- 時區已更改為 UTC。
- NTP 服務已啟用。
6. 常見錯誤與隱藏的問題
"RTC in local TZ: no" 與本地時區不一致。 很多系統更喜歡使用 UTC 作為硬體時間,這樣可以避免在不同時區工作時產生混亂。這不是錯誤,而是一種偏好。
修改時間時出現訪問錯誤。
timedatectl
指令需要超級用戶的權限。確保你使用的是sudo
。NTP 同步無法啟用。 檢查你的伺服器上是否有 NTP 服務在運行。例如,對於
systemd-timesyncd
,執行以下指令:sudo systemctl start systemd-timesyncd
那實際上有什麼用呢?
- 伺服器的管理。 設置時間和時區對於日誌的正確運行、數據同步和任務計劃很重要。
- 與國際項目合作。 使用 UTC 作為標準能在與來自不同時區的客戶合作時避免混亂。
- 面試和證照考試。 關於
timedatectl
和時間管理的問題經常出現在系統管理員職位的考試和面試中。
現在你已經準備好在 Linux 中管理時間了,就像管理你的截稿日期一樣:自信、準確且毫無意外。
GO TO FULL VERSION