Arch-Linux

/etc/timezone 是做什麼用的?

  • June 30, 2018

在我的 Manjaro linux 機器上,我有一個文件/etc/timezone,其中包含:

Asia/Bangkok

另一個 Manjaro 論壇使用者也有相同的文件。該執行緒總體上包含有關此問題的一些現有技術。

奇怪的是timedatectl status不使用這個文件來報告Region/City。這是初始狀態:

$ timedatectl status                                          
                     Local time: Fri 2018-06-29 11:01:28 +07       
                 Universal time: Fri 2018-06-29 04:01:28 UTC    
                       RTC time: Fri 2018-06-29 04:01:28        
                      Time zone: Asia/Bangkok (+07, +0700)             
      System clock synchronized: no                          
systemd-timesyncd.service active: no                              
                RTC in local TZ: no                            

現在我/etc/localtime用它指向的文件的內容覆蓋符號連結:

$ sudo ln -f "$(realpath /etc/localtime)" /etc/localtime          
$ timedatectl status                                           
                     Local time: Fri 2018-06-29 04:04:03 UTC
                 Universal time: Fri 2018-06-29 04:04:03 UTC
                       RTC time: Fri 2018-06-29 04:04:04
                      Time zone: n/a (UTC, +0000) 
      System clock synchronized: no                               
systemd-timesyncd.service active: no
                RTC in local TZ: no  

請注意本地時間更改以匹配 UTC 和n/a時區。

所以,timedatectl不讀取/etc/timezonetimedatectl set-timezone也不寫入/etc/timezone

除了這個猜測,我/etc/timezone的也是一個謎。

  1. 寫什麼?
  2. 讀什麼?
  3. 做什麼的?

GNU libc(以及任何非嵌入式 Linux)讀取/etc/localtime以確定係統的時區(如果沒有被TZ環境變數或特定於應用程序的設置覆蓋,則為預設時區)。*BSD 做同樣的事情。一些嵌入式 Linux 系統做事不同。

/etc/localtime應該是 . 下文件的符號連結/usr/share/zoneinfo/。普通應用程序不介意,它們只讀取文件的內容,但係統管理實用程序(例如)timedatectl更關心,因為它們也可以更改設置,並且它們會通過更改符號連結的目標來做到這一點。

Java 做了(或做過?)不同的事情:它讀取/etc/timezone,其中包含一個時區名稱,它應該是相對於/usr/share/zoneinfo. 我不知道有任何其他程序使用/etc/timezone. 我不知道為什麼 Sun 選擇與世界其他地方不同的事情。

引用自:https://unix.stackexchange.com/questions/452559