在安裝完新系統後,系統的時區會是預設值,不一定是自己的所在時區。這會影響到系統中程式關於時間處理,例如日誌檔案的時間。如果不修正為自己的所在時區,在查詢日誌檔案中的記錄查找錯誤訊息時,十分地不方便。因此修正時區是必須要做的。

檢查目前系統時間

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 系統時區

要修改系統時區,必須使用相對應的時區名稱,例如以上例子中的 Etc/UTC。使用 timedatectl 指令中來查詢時區名稱的列表。

timedatectl list-timezones

如圖:

file

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

ls user/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 <你的所在時區名稱>

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

timedatectl set-timezone Asia/Taipei

修改完,再次檢示系統時區看看是否已更新。

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 發行版的方法

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

刪除

rm -rf /etc/localtime

建立連結

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

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

結論

不需要重開機或者其它指令,設定後立即生效。有任何問題,歡迎留言交流哦。

最後修改日期: 2021-02-11

作者

留言

撰寫回覆或留言

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