概論:
linux的時間分為:UTC時間、本地時間,一般安裝時會提示你選擇一種時間表示,通常預設都是UTC時間。windows在安裝時一般就指定了地區,所以時間指的是本地時間!
通常的和時間有關的命令都支援這兩種時間的顯示和設定,預設顯示的都是本地時間!
原理:
通常,在用linux時,經常發現時間不正確:不是bios的時間和linux系統的時間不一致,就是liunx下的時間和windows下的時間不對,why????
對於windows:bios <----->wndows
os啟動時,讀取bios的時間作為系統的時間,地區設定不影響時間的值,windows時間總是本地的!
修改時間的命令 同時修改windows系統時間 和 bios的時間
地區設定僅僅影響不同時區的資訊交換!
對於linux:bios <--------[tz]-------->liunx
os啟動時,讀取bios的時間作為系統的本地時間值,根據地區設定擷取系統的utc時間值,linux時間具有兩套標準的時間值。
date命令顯示、修改 linux的本地時間、utc時間;但不修改bios的本地時間!
hwclock顯示、修改bios時間,但不會影響os的時間!
常見問題及解決:
如何查看bios的(本地)時間?
hwclock --show | hwclock -r
如何以utc時間顯示bios的時間?
hwclock --utc |hwclock -u:千萬注意,正utc時間和本地時間的時間差值可不一定和你os的時區差值相同——因為二者沒有關係;它是指你自上次調整bios時間時(--set |--systohc|--adjust),記錄在相關硬體時間資訊調整檔案/etc/adjtime中的差值!
bios時間和真實的本地時間不一致,如何設定正確的bios本地時間?
hwclock --set --date=總是本地時間字串 # --set 和 --date選項永遠是在一起使用的!”總是本地時間字串“意思是,該時間字串不受--utc選項影響;其格式也非常靈活!
bios時間是正確的本地時間,如何根據當前的os時區設定,擷取正確的本地時間?
hwclock --hctosys
bios時間是正確的本地時間,如何根據當前的os時區設定,擷取正確的本地utc時間?
hwclock --systz
如何查看當前os的本地時間?
date
如何查看當前os的utc時間?
date -u |date --utc |date --universal
不考慮bios的本地時間,如何直接設定正確的本地時間?
date -s {時間字串| --set=時間字串 }
不考慮bios的本地時間,如何直接設定正確的utc時間?
date -u {-s 時間字串| --set=時間字串}
如何以指定的格式顯示時間(本地、utc、指定檔案的修改時間、檔案的時間列表)?
-d|--date
-f|--file
-r|--reference
date 選項 +時間格式規範字串
如何以RFC格式顯示時間?
RFC 2822格式:utc時間+時間差的標識格式
date -R|date --rfc-2822
date --rfc-3339=‘timespec’
如何擷取最準確的時間?
ntp協議;ntp伺服器(Internet時間伺服器);ntp用戶端;同步時間
ntpdate
最廣泛、古老、知名的ntp伺服器:
Area: |
HostName: |
Worldwide |
pool.ntp.org |
Asia |
asia.pool.ntp.org |
Europe |
europe.pool.ntp.org |
North America |
north-america.pool.ntp.org |
Oceania |
oceania.pool.ntp.org |
South America |
south-america.pool.ntp.org |
搭建自己的時間伺服器?
必須的包:openntpd
守護進程(伺服器處理序)ntpd
守護進程設定檔:/etc/openntpd/ntpd.conf