時(shí)間在任何系統(tǒng)里都是最基本的部分,必不可少。本文介紹CentOS系統(tǒng)中與時(shí)間的相關(guān)命令。
基本概念
硬件時(shí)鐘(Hardware Clock)
硬件時(shí)鐘,也叫實(shí)時(shí)時(shí)鐘(RealTimeClock),或者BIOS時(shí)鐘,或者CMOS時(shí)鐘。它是位于機(jī)器主板上的實(shí)際硬件設(shè)備,一般靠電池維持運(yùn)行。所以,即使機(jī)器關(guān)機(jī),它也會(huì)一直保持記錄當(dāng)前時(shí)間,一般不是十分精確。
系統(tǒng)時(shí)間(System Time)
系統(tǒng)時(shí)間指的是操作系統(tǒng)中的時(shí)間。它是由系統(tǒng)加電后的硬件定時(shí)器驅(qū)動(dòng),Linux系統(tǒng)根據(jù)定時(shí)器信號(hào)來(lái)遞增時(shí)間計(jì)數(shù)。這個(gè)定時(shí)器非常準(zhǔn)確,誤差很小。
Linux系統(tǒng)啟動(dòng)時(shí),首先從硬件時(shí)鐘讀取當(dāng)前時(shí)間來(lái)初始化系統(tǒng)時(shí)間計(jì)數(shù),之后就會(huì)根據(jù)定時(shí)器中斷來(lái)遞增它,不再依賴于硬件時(shí)鐘。
時(shí)區(qū)(time zone)
世界各國(guó)日出的時(shí)間并不相同,而日出的時(shí)刻卻都被當(dāng)?shù)胤Q作6點(diǎn)鐘,同一時(shí)刻,各國(guó)的鐘表指針位置并不相同。也就造就了時(shí)區(qū)的出現(xiàn)。UTC是世界標(biāo)準(zhǔn)時(shí),其他時(shí)區(qū)都是在此基礎(chǔ)上增減。例如我國(guó)的北京時(shí)間就比世界時(shí)早8個(gè)小時(shí)。
硬件時(shí)鐘里一般不會(huì)記錄時(shí)區(qū)的信息,而往往只是當(dāng)?shù)貢r(shí)間。系統(tǒng)時(shí)間就必須要把時(shí)區(qū)的概念考慮進(jìn)去,否則不同時(shí)區(qū)的計(jì)算機(jī)進(jìn)行信息交流的時(shí)候,時(shí)間不能統(tǒng)一。這對(duì)于很多軟件系統(tǒng)是致命的,如嚴(yán)重依賴于時(shí)間標(biāo)簽的版本管理系統(tǒng)。Linux內(nèi)核中保存了當(dāng)前時(shí)區(qū)的信息,Linux的文件系統(tǒng)就依賴于這個(gè)時(shí)區(qū)信息。
常用命令
1 查看與設(shè)置當(dāng)前BIOS時(shí)間
[root@centos192 smstong]# hwclock -r # 讀取硬件時(shí)鐘 2015年06月03日 星期三 12時(shí)30分46秒 -0.891230 seconds [root@centos192 smstong]# hwclock --set --date="06/03/2015 16:45:05" # 設(shè)置硬件時(shí)鐘
2 查看與設(shè)置當(dāng)前操作系統(tǒng)時(shí)間
[root@centos192 smstong]# date # 查看當(dāng)前系統(tǒng)時(shí)間 2015年 06月 03日 星期三 19:37:55 CST [root@centos192 smstong]# date -s 10:00:00 # 設(shè)置系統(tǒng)時(shí)間 2015年 06月 03日 星期三 10:00:00 CST
3 硬件時(shí)鐘與系統(tǒng)時(shí)間交互
[root@centos192 smstong]# hwclock --hctosys # 用硬件時(shí)鐘設(shè)置系統(tǒng)時(shí)間 [root@centos192 smstong]# hwclock --systohc # 用系統(tǒng)時(shí)間設(shè)置硬件時(shí)鐘
4 查看與設(shè)置當(dāng)前系統(tǒng)的時(shí)區(qū)
[root@centos192 smstong]# date -R # 查看帶時(shí)區(qū)信息的當(dāng)前系統(tǒng)時(shí)間 Wed, 03 Jun 2015 19:45:37 +0800 [root@centos192 smstong]# export TZ='America/Havana' # 設(shè)置時(shí)區(qū)為古巴時(shí)間 [root@centos192 smstong]# date -R # 可以看到時(shí)區(qū)成了-0400 Wed, 03 Jun 2015 07:49:49 -0400
要想永久性的設(shè)置時(shí)區(qū)信息,則可以在 /etc/profile配置文件里增加 export TZ=’America/Havana’。這樣機(jī)器重啟后也會(huì)自動(dòng)設(shè)置時(shí)區(qū)。
注意Linux內(nèi)核和應(yīng)用程序使用的時(shí)區(qū)并不一定相同,雖然應(yīng)該相同。應(yīng)用程序首先靠TZ環(huán)境變量來(lái)確定時(shí)區(qū),如果TZ沒(méi)有設(shè)置,則使用內(nèi)核的設(shè)置。內(nèi)核是根據(jù)/etc/sysconfig/clock文件來(lái)設(shè)置時(shí)區(qū)的。* (這段是我的猜測(cè),請(qǐng)大俠指正) *
5 通過(guò)網(wǎng)絡(luò)校時(shí) 前面我們說(shuō)過(guò)硬件時(shí)鐘往往不太準(zhǔn)確,系統(tǒng)時(shí)鐘雖然比較準(zhǔn)確,但是仍不能滿足高精度的時(shí)間要求。最好的方式就是通過(guò)NTP協(xié)議從專門的時(shí)間服務(wù)器來(lái)讀取正確的時(shí)間,然后校正系統(tǒng)時(shí)間和硬件時(shí)鐘。
[root@centos192 smstong]# ntpdate -u s1a.time.edu.cn # 通過(guò)NTP校時(shí)修正系統(tǒng)時(shí)間 3 Jun 19:56:42 ntpdate[21550]: adjust time server 202.112.10.60 offset 0.000163 sec [root@centos192 smstong]# hwclock -w # 然后根據(jù)矯正過(guò)的系統(tǒng)時(shí)間設(shè)置硬件時(shí)鐘
如果是長(zhǎng)時(shí)間運(yùn)行的服務(wù)器,則需要把校時(shí)命令寫成腳本,通過(guò)crond自動(dòng)定時(shí)執(zhí)行之。