在安裝完新系統後,系統的時區通常會是預設值,而這個預設值很可能不是你所在的時區。這樣的情況會對系統中的時間處理造成影響,例如日誌檔案的時間戳記。如果不修正為實際所在時區,在查找日誌檔案中的記錄或錯誤訊息時,很容易因為時間不一致而造成混淆。因此,修正時區是在系統配置中必不可少的一個步驟。

了解時區的重要性

時區是根據地理位置而劃分的時間區域。全世界共有 24 個時區,每個時區相對於協調世界時(UTC)有固定的時差。正確的時區設定不僅對系統日誌至關重要,還涉及到與其他系統或服務的溝通、定時任務的執行以及用戶交互。不正確的時區設定值可能會引起不必要的困惑和問題。

檢查目前系統時間

timedatectl 是好用的命列列工具,它可以檢視及修改目前的系統時間。這個指令內建在各種 Linux 的發行版中。直接輸入不加參數的指令,則會顯示目前時間。

timedatectl

如圖所示:

file

當你執行這個命令後,你會看到類似以下的輸出:

               Local time: Thu 2021-01-21 07:46:01 UTC
           Universal time: Thu 2021-01-21 07:46:01 UTC
                 RTC time: Thu 2021-01-21 07:46:01
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

可以從這個輸出中看到,可以發現預設的系統時區為 UTC。系統的時區是設定在 /etc/localtime 這個檔案,而這個檔案是一個符號連結到一個二進制時區的標識符,不是一個能直接修改內容的純文字檔。

我們可以通過以下命令查看這個連結:

ls -l /etc/localtime

結果:

lrwxrwxrwx 1 root root 27 Jan 19 04:00 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC

修改 Linux 系統時區

在你更改系統時區之前,首先需要知道你要設置的時區的準確名稱。這個名稱通常是 地區/城市 的形式,例如 Asia/Taipei 或 America/New_York。

可以使用以下命令來查看所有可用的時區:

timedatectl list-timezones

如圖:

file

另一個方法,也可以直接進去 usr/share/zonneinfo 目錄中查看。

ls usr/share/zonneinfo

如圖:

file

查詢時區名稱列表

使用 timedatectl 指令會列出一大堆字串資料,如果你已經知道你要設置的時區的地區,搭配 grep 指令過濾出想要的資訊。使用下面的指令來只顯示亞洲的時區:

timedatectl list-timezones | grep 'Asia'

以下是身在亞州的各時區名稱。

Asia/Almaty
Asia/Amman
Asia/Anadyr
Asia/Aqtau
Asia/Aqtobe
Asia/Ashgabat
Asia/Atyrau
Asia/Baghdad
Asia/Baku
Asia/Bangkok
Asia/Barnaul
Asia/Beirut
Asia/Bishkek
Asia/Brunei
Asia/Chita
Asia/Choibalsan
Asia/Colombo
Asia/Damascus
Asia/Dhaka
Asia/Dili
Asia/Dubai
Asia/Dushanbe
Asia/Famagusta
Asia/Gaza
Asia/Hebron
Asia/Ho_Chi_Minh
Asia/Hong_Kong
Asia/Hovd
Asia/Irkutsk
Asia/Jakarta
Asia/Jayapura
Asia/Jerusalem
Asia/Kabul
Asia/Kamchatka
Asia/Karachi
Asia/Kathmandu
Asia/Khandyga
Asia/Kolkata
Asia/Krasnoyarsk
Asia/Kuala_Lumpur
Asia/Kuching
Asia/Macau
Asia/Magadan
Asia/Makassar
Asia/Manila
Asia/Nicosia
Asia/Novokuznetsk
Asia/Novosibirsk
Asia/Omsk
Asia/Oral
Asia/Pontianak
Asia/Pyongyang
Asia/Qatar
Asia/Qostanay
Asia/Qyzylorda
Asia/Riyadh
Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk
Asia/Taipei
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
Asia/Thimphu
Asia/Tokyo
Asia/Tomsk
Asia/Ulaanbaatar
Asia/Urumqi
Asia/Ust-Nera
Asia/Vladivostok
Asia/Yakutsk
Asia/Yangon
Asia/Yekaterinburg
Asia/Yerevan

找到相對於自己所在地的時區名稱後,依以下指令設定。

設定時區

當你找到合適的時區名稱時,可以使用 timedatectl set-timezone 命令來更改系統的時區。例如:

timedatectl set-timezone <你的所在時區名稱>

例如筆者是住在台灣,則使用 Asia/Taipei

timedatectl set-timezone Asia/Taipei

修改完,這個指令會立即更新系統的時區設置,並且不需要重新啟動。你可以再次使用 timedatectl 指令來確認更改已經生效。

timedatectl

結果:

               Local time: Thu 2021-01-21 16:25:32 CST
           Universal time: Thu 2021-01-21 08:25:32 UTC
                 RTC time: Thu 2021-01-21 08:25:31
                Time zone: Asia/Taipei (CST, +0800)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

時區名稱已從 Etc/UTC 更改為 Asia/Taipei

舊 Linux 發行版的方法

如果你正在使用較舊的 Linux 發行版,系統並沒有 timedatectl 也不想特別為了設定時區來安裝這個工具。在前面的例子中提到 /etc/localtime 這個檔案,刪除它再設定新的符號連結到相對應的一個二進制時區的標識符即可。以下是步驟。

刪除

rm -rf /etc/localtime

建立連結

ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime

這樣就把原本的時區設定換成了 Asia/Taipei

配置 NTP(網路時間協議)同步

設置正確的時區是重要的一步,但為了確保系統時間的準確性,建議配置 NTP(Network Time Protocol)同步。這個協議允許系統通過互聯網與公共時間服務器同步時間。

在系統中安裝並啟動 NTP 服務通常是很簡單的:

apt-get install ntp  # 在 Debian 和 Ubuntu 上
yum install ntp      # 在 CentOS 和 RHEL 上
systemctl start ntp
systemctl enable ntp

結論

正確設置系統的時區以及通過 NTP 同步時間是確保 Linux 系統正常運作的重要部分。通過使用 timedatectl 指令或手動設置,我們可以輕鬆地完成這些任務。時區和時間的正確配置有助於避免與時間相關的錯誤,並使系統管理和故障排除更加有效。不管是在服務器還是在個人電腦上,這些步驟都是必不可少的。

最後修改日期: 2023-06-19

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。