Linux系统时间设置手册Linux系统时间设置手册第2页/共7页目录目录..............................................................................................................21引言...............................................................................................31.1目的................................................................................................................31.2对象................................................................................................................32修订历史........................................................................................33参考资料........................................................................................34术语与缩写....................................................................................34.1术语................................................................................................................34.2缩写................................................................................................................45时间和时区....................................................................................46如何设置LinuxTimeZone...........................................................57RealTimeClock(RTC)andSystemClock..............................................6Linux系统时间设置手册第3页/共7页1引言1.1目的本手册的编写目的是对配置Linux系统时间的相关步骤进行总结。1.2对象本文档主要供下列人员使用:实施人员――使用Linux系统2修订历史日期版本说明作者2012-10-111.0.0初步整理Marsleo3参考资料[1].4术语与缩写4.1术语序号术语名称术语定义Linux系统时间设置手册第4页/共7页4.2缩写序号缩写缩写意义5时间和时区如果有人问你说现在几点?你看了看表回答他说晚上8点了.这样回答看上去没有什么问题,但是如果问你的这个人在欧洲的话那么你的回答就会让他很疑惑,因为他那里还太阳当空呢.这里就有产生了一个如何定义时间的问题.因为在地球环绕太阳旋转的24个小时中,世界各地日出日落的时间是不一样的.所以我们才有划分时区(timezone)的必要,也就是把全球划分成24个不同的时区.所以我们可以把时间的定义理解为一个时间的值加上所在地的时区(注意这个所在地可以精确到城市)地理课上我们都学过格林威治时间(GMT),它也就是0时区时间.但是我们在计算机中经常看到的是UTC.它是CoordinatedUniversalTime的简写.虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC那么假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式:20:00CST12:00UTC这里的CST是ChineseStandardTime,也就是我们通常所说的北京时间了.因为中国处在UTC+8时区,依次类推那么也就是12:00UTC了.为什么要说这些呢?第一,不管通过任何渠道我们想要同步系统的时间,通常提供方只会给出UTC+0的时间值而不会提供时区(因为它不知道你在哪里).所以当我们设置系统时间的时候,设置好时区是首先要做的工作Linux系统时间设置手册第5页/共7页第二,很多国家都有夏令时(我记得小时候中国也实行过一次),那就是在一年当中的某一天时钟拨快一小时(比如从UTC+8一下变成UTC+9了),那么同理到时候还要再拨慢回来.如果我们设置了正确的时区,当需要改变时间的时候系统就会自动替我们调整。6如何设置LinuxTimeZone在Linux下glibc提供了事先编译好的许多timezone文件,他们就放在/usr/share/zoneinfo这个目录下,这里基本涵盖了大部分的国家和城市#ls-F/usr/share/zoneinfo/Africa/Chile/FactoryIcelandMexico/posix/UniversalAmerica/CST6CDTGBIndian/Mideast/posixrulesUS/Antarctica/CubaGB-EireIranMSTPRCUTCArctic/EETGMTiso3166.tabMST7MDTPST8PDTWETAsia/EgyptGMT0IsraelNavajoright/W-SUAtlantic/EireGMT-0JamaicaNZROCzone.tabAustralia/ESTGMT+0JapanNZ-CHATROKZuluBrazil/EST5EDTGreenwichKwajaleinPacific/SingaporeCanada/Etc/HongkongLibyaPolandTurkeyCETEurope/HSTMETPortugalUCT在这里面我们就可以找到自己所在城市的timezone文件.那么如果我们想查看对于每个timezone当前的时间我们可以用zdump命令#zdumpHongkongHongkongFriJul606:13:572007HKT那么我们又怎么来告诉系统我们所在timezone是哪个呢?方法有很多,这里举出两种:第一个就是修改/etc/localtime这个文件,这个文件定义了我么所在的localtimezone.我们可以在/usr/share/zoneinfo下找到我们的timezone文件然后拷贝去到/etc/localtimezone(或者做个symboliclink)假设我们现在的timezone是BST(也就是英国的夏令时间,UTC+1)#dateThuJul523:33:40BST2007我们想把timezone换成上海所在的时区就可以这么做#cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtimeLinux系统时间设置手册第6页/共7页#dateFriJul606:35:52CST2007这样时区就改过来了(注意时间也做了相应的调整)第二种方法也就设置TZ环境变量的值.许多程序和命令都会用到这个变量的值.TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令#tzselect...YoucanmakethischangepermanentforyourselfbyappendingthelineTZ='Asia/Hong_Kong';(permissiondenied?)exportTZtothefile'.profile'inyourhomedirectory;thenlogoutandloginagain.TZ变量的值会override/etc/localtime.也就是说当TZ变量没有定义的时候系统才使用/etc/localtime来确定timezone.所以你想永久修改timezone的话那么可以把TZ变量的设置写入/etc/profile里7RealTimeClock(RTC)andSystemClock说道设置时间这里还要明确另外一个概念就是在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(SystemClock)硬件时钟是指嵌在主板上的特殊的电路,它的存在就是平时我们关机之后还可以计算时间的原因。系统时钟就是操作系统的kernel所用来计算时间的时钟.它从1970年1月1日00:00:00UTC时间到目前为止秒数总和的值在Linux下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了。那么既然两个时钟独自运行,那么时间久了必然就会产生误差了,下面我们来看一个例子:#dateFriJul600:27:13BST2007[root@rhe5/]#hwclock--helphwclock-queryandsetthehardwareclock(RTC)Usage:hwclock[function][options...]Functions:--helpshowthishelpLinux系统时间设置手册第7页/共7页--showreadhardwareclockandprintresult--setsetthertctothetimegivenwith--date--hctosyssetthesystemtimefromthehardwareclock--systohcsetthehardwareclocktothecurrentsystemtime--adjustadjustthertctoaccountforsystematicdriftsincetheclockwaslastsetoradjusted--getepochprintoutthekernel'shardwareclockepochvalue--setepochsetthekernel'shardwareclockepochvaluetothevaluegivenwith--epoch--versionprintouttheversionofhwclocktostdoutOptions:--utcthehardwareclockiskeptincoordinateduniversaltime--localtimethehardwareclockiskeptinlocaltime--directisaaccesstheISAbusdirectlyinsteadof/dev/rtc--badyearignorertc'syearbecausethebiosisbroken--datespecifiesthetimetowhichtosetthehardwareclock--epoch=yearspecifiestheyearwhichisthebeginningofthehardwareclock'sepochvalue--noadjfiledonotaccess/etc/adjtime.Requirestheuseofeither--utcor--localtime#hwclock--showFri06Jul200712:27:17AMBST-0.968931seconds通过hwclock--show命令我们可以查看机器上的硬件时间(alwaysinlocaltimezone),我们可以看到它和系统时间还是有一定的误