一、首先要弄清幾個概念:
1. "系統(tǒng)時(shí)間"與"硬件時(shí)間"
系統(tǒng)時(shí)間: 一般說來就是我們執(zhí)行 date 命令看到的時(shí)間,linux系統(tǒng)下所有的時(shí)間調(diào)用(除了直接訪問硬件時(shí)間的命令)都是使用的這個時(shí)間。
硬件時(shí)間: 主板上BIOS中的時(shí)間,由主板電池供電來維持運(yùn)行,系統(tǒng)開機(jī)時(shí)要讀取這個時(shí)間,并根據(jù)它來設(shè)定系統(tǒng)時(shí)間(注意:系統(tǒng)啟動時(shí)根據(jù)硬件時(shí)間設(shè)定系統(tǒng)時(shí)間的過程可能存在時(shí)區(qū)換算,這要視具體的系統(tǒng)及相關(guān)設(shè)置而定)。
2. "UTC時(shí)間"與"本地時(shí)間"
UTC時(shí)間:Coordinated Universal 8 e2 i( H7 t0 ^/ ^Time 世界協(xié)調(diào)時(shí)間(又稱世界標(biāo)準(zhǔn)時(shí)間、世界統(tǒng)一時(shí)間),在一般精度要求下,它與GMT(Greenwich Mean Time,格林威治標(biāo)準(zhǔn)時(shí)間)是一樣的,其實(shí)也就是說 GMT≈UTC,但 UTC 是以原子鐘校準(zhǔn)的,更精確。
本地時(shí)間:由于處在不同的時(shí)區(qū),本地時(shí)間一般與UTC是不同的,換算方法就是
本地時(shí)間 = UTC + 時(shí)區(qū) 或 UTC = 本地時(shí)間 - 時(shí)區(qū)
時(shí)區(qū)東為正,西為負(fù),例如在中國,本地時(shí)間都使用北京時(shí)間,在linux上顯示就是 CST(China Standard Time,中國標(biāo)準(zhǔn)時(shí),注意美國的中部標(biāo)準(zhǔn)時(shí)Central Standard Time也縮寫為CST,與這里的CST不是一回事!),時(shí)區(qū)為東八區(qū),也就是 +8 區(qū),所以 CST=UTC+(+8小時(shí)) 或 UTC=CST-(+8小時(shí))。
二、時(shí)間命令
1. 系統(tǒng)時(shí)間 date
直接調(diào)用 date,得到的是本地時(shí)間。如果想得到UTC時(shí)間的話,使用 date -u.
[12-01 19:07> ~]$ date
2009年 12月 07日 星期一 14:22:20 CST
[12-01 19:07> ~]$ date -u
2009年 12月 07日 星期一 06:22:22 UTC
2. 硬件時(shí)間 /sbin/hwclock
直接調(diào)用 /sbin/hwclock 顯示的時(shí)間就是 BIOS 中的時(shí)間嗎?未必!這要看 /etc/sysconfig/clock 中是否啟用了UTC,如果啟用了UTC(UTC=true),顯示的其實(shí)是經(jīng)過時(shí)區(qū)換算的時(shí)間而不是BIOS中真正的時(shí)間,如果加上 --localtime 選項(xiàng),則得到的總是 BIOS 中實(shí)際的時(shí)間。
[12-01 19:07> ~]# hwclock
2009年12月07日 星期一 14時(shí)28分43秒 -0.611463 seconds
[12-01 19:07> ~]# hwclock --utc
2009年12月07日 星期一 14時(shí)28分46秒 -0.594189 seconds
[12-01 19:07> ~]# hwclock --localtime
2009年12月07日 星期一 06時(shí)28分50秒 -0.063875 seconds
3. /etc/localtime
這個文件用來設(shè)置系統(tǒng)的時(shí)區(qū),將 /usr/share/zoneinfo/ 中相應(yīng)文件拷貝到/etc下并重命名為 localtime 即可修改時(shí)區(qū)設(shè)置,而且這種修改對 date 命令是及時(shí)生效的。不論是 date 還是 hwclock 都會用到這個文件,會根據(jù)這個文件的時(shí)區(qū)設(shè)置來進(jìn)行UTC和本地之間之間的換算
4. /etc/sysconfig/clock
這個文件只對 hwclock 有效,而且似乎是只在系統(tǒng)啟動和關(guān)閉的時(shí)候才有用,比如修改了其中的 UTC=true 到 UTC=false 的前后,執(zhí)行 hwclock (--utc, 或 --localtime) 都沒有變化,要重啟系統(tǒng)后才生效。注:如果設(shè)置 UTC=false 并重啟系統(tǒng)后,執(zhí)行一些命令結(jié)果如下:
date 2009年 12月 07日 星期一 19:26:29 CST
date -u 2009年 12月 07日 星期一 11:26:29 UTC
hwclock 2009年12月07日 星期一 19時(shí)26分30秒 -0.442668 seconds
hwclock --utc 2009年12月08日 星期二 03時(shí)26分31秒 -0.999091 seconds
hwclock --localtime 2009年12月07日 星期一 19時(shí)26分32秒 -0.999217 seconds
可見,如果不使用UTC,BIOS時(shí)間(紅色部分)就是系統(tǒng)本地時(shí)間,而且注意這時(shí)執(zhí)行 hwclock --utc 得到的結(jié)果沒有任何意義,因?yàn)檫@里我們已經(jīng)禁用了UTC,而且也明顯不符合"本地時(shí)間=UTC+時(shí)區(qū)"的關(guān)系。
三、linux與windows雙系統(tǒng)間的時(shí)間同步
系統(tǒng)啟動和關(guān)閉時(shí),硬件時(shí)間與系統(tǒng)時(shí)間之間的同步有兩種方式(假設(shè)在中國,用CST代表本地時(shí)間):
方式A: 使用UTC(對linux就是 /etc/sysconfig/clock 中 UTC=true)
開機(jī): BIOS------->UTC(將BIOS中的時(shí)間看成是UTC)------(時(shí)區(qū)變化)----->CST
關(guān)機(jī): CST -------(時(shí)區(qū)變化)----->UTC-------存儲到------>BIOS
方式B: 不使用UTC(對linux就是 /etc/sysconfig/clock 中 UTC=false)
開機(jī): BIOS--------------------->CST(將BIOS中的時(shí)間看成是CST)
關(guān)機(jī): CST ---------存儲到------>BIOS
通過設(shè)定 /etc/sysconfig/clock,linux可以支持這兩種方式,然而windows只支持方式B(至少是默認(rèn)支持B,而我不知道怎么能讓它支 持A),那么在雙系統(tǒng)情況下,如果linux設(shè)成A方式,那么在linux與windows系統(tǒng)切換時(shí)一定會造成時(shí)間混亂的,解決辦法就是將linux中 的UTC禁用,也設(shè)成B方式就可以了。
注:可以通過 hwclock --hctosys 來利用硬件時(shí)間來設(shè)置系統(tǒng)時(shí)間(注意不是簡單的復(fù)制BIOS中的時(shí)間為系統(tǒng)時(shí)間,要看是否使用UTC,如果使用的話則要做時(shí)區(qū)換算),通過 hwclock --systohc 來根據(jù)系統(tǒng)時(shí)間設(shè)置硬件時(shí)間(也要看是否啟用UTC來決定是否做時(shí)區(qū)換算)。
總之,不論使用 --systohc 還是 --hctosys,同步后直接運(yùn)行不帶參數(shù)的 hwclock 得到的時(shí)間與直接運(yùn)行 date 得到的時(shí)間應(yīng)該一致,這個時(shí)間是否就是BIOS中的時(shí)間(hwclock --localtime)那就不一定了,如果啟用了UTC就不是,沒啟用UTC就是。
而且還要注意:在系統(tǒng)中手動使用 hwclock hwclock --set --date=yyyy-mm-dd 來設(shè)置BIOS時(shí)間只在系統(tǒng)運(yùn)行時(shí)有效,因?yàn)楫?dāng)系統(tǒng)關(guān)閉時(shí),還會按設(shè)定好的方式根據(jù)系統(tǒng)時(shí)間來重設(shè)BIOS時(shí)間的,于是手動的設(shè)置便被覆蓋掉了。
Linux時(shí)鐘分為系統(tǒng)時(shí)鐘(System Clock)和硬件(Real Time Clock,簡稱RTC)時(shí)鐘。系統(tǒng)時(shí)鐘是指當(dāng)前Linux Kernel中的時(shí)鐘,而硬件時(shí)鐘則是主板上由電池供電的時(shí)鐘,這個硬件時(shí)鐘可以在BIOS中進(jìn)行設(shè)置。當(dāng)Linux啟動時(shí),硬件時(shí)鐘會去讀取系統(tǒng)時(shí)鐘的設(shè)置,然后系統(tǒng)時(shí)鐘就會獨(dú)立于硬件運(yùn)作。
Linux中的所有命令(包括函數(shù))都是采用的系統(tǒng)時(shí)鐘設(shè)置。在Linux中,用于時(shí)鐘查看和設(shè)置的命令主要有date、hwclock和clock.其中,clock和hwclock用法相近,只用一個就行,只不過clock命令除了支持x86硬件體系外,還支持Alpha硬件體系。
新聞熱點(diǎn)
疑難解答
圖片精選