概论:
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