Gentoo:关于系统的时间

前两天编译的时候碰到一个陌生的问题,大意是说某文件的修改时间在未来的某个时间。。。这就奇怪了

后来想到,看看自己的系统时间把,发现果然和本地的时间不一样,然后发现了一篇讲时间的文章,挺不错的,转载下,原文链接:http://www.in-life.idv.tw/index.php?/archives/362-eecaeaae.html 。发现自己虚拟机中的硬件时间确实和系统时间不一样,于是乎修改了CMOS的时间。原文如下:

在使用的電腦上保持正確的時間是件無庸置疑的事,尤其是假若這台電腦是擔任伺服器的話,時間的正確性更是重要。

在本篇文章中,說明一些在 GNU/LINUX 上對於時間的相關名詞、檔案、及如何設定及保持電腦的正確時間。

要注意的是,本人不是 "時間專家",這篇文章是個人的一些小小心得,若有繆誤,請大家抱著 "教學相長"、"互相漏氣求進步" 的精神,多多予以指正。

● 何謂 GMT、UTC、CST、時區、SYSTEM TIME、Hardware clock

- GMT(Greenwich Mean Time,格林威治標準時間)

請參考以下網址:
http://zh.wikipedia.org/wiki/GMT

-UTC(Universal Time/Temps Cordonné 世界標準時間)

請參考以下網址:
http://zh.wikipedia.org/wiki/UTC

UTC 可說是世界上時間的標準了,其計算的標準也是以 "格林威治" 所在的時區(即為 0 時區 見figure 2)為根基,所以在某個程度類似,如 GMT 和 UTC 都是以 "格林威治" 這個時區為 0 時區,但兩者取樣的標準不同,UTC 是採用 "世界原子鐘" 的方式,時差极小(2000年才會慢 1 秒),而 GMT 的時差就大多了。

-CST(國家標準時間,一說中原標準時間)

在電腦中顯示時間,都是使用這個格式了,你可以將之視為 "UTC+8小時 = CST",如以下附圖,使用指令 date,就是以 CST 時間格式來顯示。

常聽收音機的人,常常聽到的 "現在中原標準時間 ...... ",指的就是這個東東了。畢竟使用 UTC+8 這樣來報時,有點怪怪的。

figure 1


- 時區

由於地球由西向東自轉(figure 2,這也是為什麼太陽由東方升起的原因),加以地球是圓的(360度),地球自轉一周24小時,所以我們由 360 度/ 24 = 15 度,可將地球分為 24 個時區,每個時區為 15 度,如 figure 3。在時區 0 的東方(也就是東經),時間都會快些,如台灣是 UTC+8,相對的,在時區 0 的西方(西經),時間都會慢些。

figure 2


要注意的是,時區只是個 "概括" 的分法,同一個國家可能橫跨好幾個時區,並不很依循這個時區分類的標準,像中國大陸便是如此(即都是 UTC+8 時區,和台灣一樣)、澳洲則有三個時區,請參照 figure 3。

figure 3


- system time 及 hardware clock

system time 顧名思議就是系統時間,也就是在目前電腦上的時間,如前面 figure 1,當我們鍵入 date 時,顯示的這是這個時間。

在每一台電腦中,都有一個 "時間晶片 CMOS",內存放著時間,這個晶片即使關機了,也一直在計時著。這就是 hardware clock。

在某些作業系統,如 MS OS,我們改變 system time 時,一併會改變 hardware clock,但在 GNU/LINUX 中則不然,這在後會提到設定的方式。

● 在 GNU/LINUX 中,一些相關的時間檔案

- /etc/timezone

不妨使用 cat /etc/timezone 來看看其內容,是否為 Asia/Taipei。

如果內容不對如何修改呢?又這些時區資料放在那呢?

這些時區資料放在 /usr/share/zoneinfo/ 這個目錄之下,自行看一下這個目錄的內容。

要修改 timezone,由於這是一個文字檔,所以用文字編輯器來編修,另外也可使用 tzconfig 這個指令來設定,在修改時請使用 sudo。

如果不了解有那些 timezone,可使用 tzselect 來查看。

-/etc/localtime

localtime 也就是本地時間,在一定程度上,也可看成中原標準時間(CST),其實這個檔案和 /usr/share/zoneinfo/Asia/Taipei 是一樣的,所以如果你的時區不對,可以:

# sudo cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime

這樣,你的 localtime 就正確了。

以下的 figure 4,示範了 localtime 的一些特性

1. 使用 date 指令
2. 沒 localtime 這個檔案,使用 date 的情況,是否顯示 UTC 時間,但少了 8 個小時
3. 將 localtime 設定成 /usr/share/zoneinfo/US/Alaska,即美國阿拉斯加時間,及用 date 的結果
4. 將 localtime 還原為 /usr/share/zoneinfo/Asia/Taipei 後,時間是否又正常了

figure 4


● 設定時間

我們以 date 這個時間來說明,其格示為:

sudo date MMDDhhmm[CC]YY[.ss]

也就是 月日時分年.秒 這樣的格式。

秒數可省略,年可用 2007 或是 07 這樣的格式。

如前所言,這樣只會改變 system time,並不會改到 hardware clock,所以在使用 date 之後,還必需:

# sudo hwclock -w

將正確的時間寫到 CMOS(hardware clock)之中。

● 自動保持時間之正確性

設定時間只是個權宜之計,如何讓你的電腦永遠保持正確時間呢?可以使用 ntpdate 這個指令來達成這個目的,請先自行安裝這個套件。

在網路上有許多提供對時的主機,以台灣為例的機構網址如下:

http://www.stdtime.gov.tw/chinese/home.htm

figure 5


在以上的這個網頁中提供了以下的對時主機:

time.stdtime.gov.tw
clock.stdtime.gov.tw
tick.stdtime.gov.tw
tock.stdtime.gov.tw
watch.stdtime.gov.tw

可透過以下指令來對時:

# sudo ntpdate time.stdtime.gov.tw
將 system time 寫到 hardware clock
# sudo hwclock -w

手動來調整 system time 及 hardware clock,在不關機的伺服器上,總是有點不方便,所以不妨使用 corn 或是每日定時修正的方式,如以下是使用每日定時修正的方式:

在 /etc/cron.daily/ 這個目錄下 cron 會每日定時去執行這些指令,所以我們不妨在這個目錄下建立一個 ntpdate 的執行檔,steps 如下:

# cd /etc/cron.daily
# sudo gedit ntpdate

加入以下內容:

/usr/sbin/ntpdate time.stdtime.gov.tw > /dev/null
/sbin/hwclock -w > /dev/null

存檔後,將 mode 設為 +x:

# sudo chmod +x ntpdate

這樣就可永保電腦時間的正確性了。

● 參考資料

man ntpdate
man -k timezone
hwclock --help

● 備註

figure 2(旋轉的地球) 及 figure 3(時區圖),取材自網路,但原址己忘了,在此說明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值