基础命令学习目录首页html
原文连接:https://www.cnblogs.com/qmfsun/p/4598650.htmllinux
date "+今天是%Y-%d-%m,如今是%H:%M:%S"shell
1. 显示时间
date命令能够按照指定格式显示日期,只键入date则以默认格式显示当前时间。以下:编程
若是须要以指定的格式显示日期,可使用“+”开头的字符串指定其格式,详细格式以下:
%n : 下一行
%t : 跳格
%H : 小时(00-23)
%I : 小时(01-12)
%k : 小时(0-23)
%l : 小时(1-12)
%M : 分钟(00-59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00-60)
%T : 直接显示时间 (24 小时制)
%X : 至关于 %H:%M:%S
%Z : 显示时区
%a : 星期几 (Sun-Sat)
%A : 星期几 (Sunday-Saturday)
%b : 月份 (Jan-Dec)
%B : 月份 (January-December)
%c : 直接显示日期与时间
%d : 日 (01-31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001-366)
%m : 月份 (01-12)
%U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0-6)
%W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完全年份 (0000-9999)
上述格式没必要全都记住,只须要掌握几个经常使用的便可。例如%Y表示年,%m表示月,%d表示日,%H表示小时,%M表示分钟,%S表示秒,%s表示从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数,至关于time函数,%w表示一周中的第几天。实例见下:bash
date "+如今时间是: %Y-%m-%d %H:%M:%S"服务器
date -s "+如今时间是: %Y-%m-%d %H:%M:%S"网络
若是要显示的时间不是当前时间,而是通过运算的时间,则能够用-d选项。例如显示三年前的时间:app
看到这个命令我很受伤,过去的时间再也回不去了,只能用命令看看。显示三个月后的时间:异步
显示十天后的时间:编程语言
有时候须要获取当前时间距离1970年0时0分0秒所经历的秒数,保存在变量中:
2. 设置时间
用 -s选项能够设置系统时间:
方式多种多样,任你选:
你要足够相信date的智能。
因为跨年、跨月、闰平年等特殊性,在平常编程过程当中对日期的处理老是异常麻烦。目前,各类编程语言也都要本身的日期函数库,因此在对日期进行处理前,必定先查查你使用的编程语言有没有日期函数库。使用shell编程时,对于日期的使用也老是会或多或少出如今程序中:输出程序处理时间,处理几天前的文件,……
在shell中date命令能够来达到咱们的需求,在这里对其常见使用方法进行总结(关于date命令的具体说明能够man date或者date --help,这里只总结常见用法)。
先看看date的选项:
选项:
-d datestr | --date=datestr: 显示 datestr 中所设定的时间 (非系统时间)
–help : 显示辅助讯息
-s datestr | --set=datestr: 将系统时间设为 datestr 中所设定的时间
-u | --utc | --universal: 显示目前的格林威治时间
–version : 显示版本编号
其中-d和-s最常使用。
1 获取当前时间戳
date "+%s" #从1970年1月1日00:00:00到当前的秒数
2 获取当前日期
date "+%Y-%m-%d" #格式串中不能有空白,若有,请将格式串总体放在双引号内
默认状况下,在显示日期和时间时,date命令使用数字0填充数字域。例如,若是用两位数字显示月份,则6月显示为“06”,也能够用下述控制符来控制填充符号。
短线(-):表示不填充数字域。
下划线(_):表示用空格填充数字域。
例如,命令“date +%d/%m”的输出为“02/01”;命令“date +%-d/%-m”的输出为“2/1”;命令“date +_d/%_m”的输出为“ 1/ 5”。
3 得到相对日期
相对日期相对当前日期而言。d 选项还能够告诉您,相对于当前日期若干天的到底是哪一天,从如今开始的若干天或若干星期之后,或者之前(过去)。经过将这个相对偏移使用引号括起来,做为 -d 选项的参数,就能够完成这项任务。
例如,您须要了解两星期之后的日期。若是您处于 Shell 提示符处,那么能够迅速地获得答案:
$ date -d ’2 weeks’
关于使用该命令,还有其余一些重要的方法:
使用 next/last指令,您能够获得之后的星期几是哪一天:
$ date -d ‘next monday’ (下周一的日期)
$ date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
$ date -d “20110321 next-day” +%Y%m%d(20110321后一天的日期)
$ date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
$ date -d last-month +%Y%m(上个月是几月)
$ date -d next-month +%Y%m(下个月是几月)
使用 ago 指令,您能够获得过去的日期:
$ date -d ’30 days ago’ (30天前的日期)
您可使用负数以获得相反的日期:
$ date -d ‘dec 14 -2 weeks’ (相对:dec 14这个日期的两周前的日期)
$ date -d ‘-100 days’ (100天之前的日期)
$ date -d ’50 days’(50天后的日期)
4 日期转时间戳
date -d | --date= ‘yyyy-mm-dd hh:mi:ss’ +%s (日期格式为yyyy-mm-dd hh:mi:ss)
如:date --date="2010-12-03" "+%s" #--date后面接须要转换的日期
5 时间戳转日期
date -d ’1970-01-01 UTC time seconds’ +”%Y-%m-%d %T %z” (time为时间戳)
如:date --date="1970-01-01 UTC 1291363421 seconds" "+%Y-%m-%d"
date date --date="@1291363421" 居然也行!!
6 日期比较大小
(1)比较日期前后最简单的方法就是直接对日期的字符串进行比较。例如:
if [ "2010-12-31" \< "2011-01-01" ] #注意小于号的转义
if [[ "2010-12-31" < "2011-01-01" ]] #此时不须要转义
(2)若是以为(1)的方法不靠谱,那么也能够把日期先转换为时间戳,再进行时间戳的对比。
stamp1=`date --date=$date1 +%s`
stamp2=`date --date=$date2 +%s`
stamp=`expr $stamp2 - $stamp1`
echo $stamp
if [ $stamp -gt 0 ] #大于0
7 获取指定日期的相对时间
$date -d "20110321 +2 days" (相对20110321两天后)
$date -d "20110321 +2 weeks" (相对20110321两周后)
这两种方式在较早的操做系统中(如RedHat 4U7)可能不支持,需使用next/last指令。
在linux环境中,无论是编程仍是其余维护,时间是必不可少的,也常常会用到时间的运算,熟练运用date命令来表示本身想要表示的时间,确定能够给本身的工做带来诸多方便。
1.命令格式:
date [参数]... [+格式]
2.命令功能:
date 能够用来显示或设定系统的日期与时间。
3.命令参数:
必要参数:
%H 小时(以00-23来表示)。
%I 小时(以01-12来表示)。
%K 小时(以0-23来表示)。
%l 小时(以0-12来表示)。
%M 分钟(以00-59来表示)。
%P AM或PM。
%r 时间(含时分秒,小时以12小时AM/PM来表示)。
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)。
%T 时间(含时分秒,小时以24小时制来表示)。
%X 时间(以本地的惯用法来表示)。
%Z 市区。
%a 星期的缩写。
%A 星期的完整名称。
%b 月份英文名的缩写。
%B 月份的完整英文名称。
%c 日期与时间。只输入date指令也会显示一样的结果。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%j 该年中的第几天。
%m 月份(以01-12来表示)。
%U 该年中的周数。
%w 该周的天数,0表明周日,1表明周一,异词类推。
%x 日期(以本地的惯用法来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
%n 在显示时,插入新的一行。
%t 在显示时,插入tab。
MM 月份(必要)
DD 日期(必要)
hh 小时(必要)
mm 分钟(必要)
ss 秒(选择性)
选择参数:
-d<字符串> 显示字符串所指的日期与时间。字符串先后必须加上双引号。
-s<字符串> 根据字符串来设置日期与时间。字符串先后必须加上双引号。
-u 显示GMT。
--help 在线帮助。
--version 显示版本信息
4.使用说明:
1.在显示方面,使用者能够设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表以下: % : 打印出 %:
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 至关于 %H:%M:%S
%Z : 显示时区 %a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完全年份 (0000..9999)
2.在设定时间方面:
date -s //设置当前时间,只有root权限才能设置,其余只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期作更改
date -s “01:01:01 2008-05-23″ //这样能够设置所有时间
date -s “01:01:01 20080523″ //这样能够设置所有时间
date -s “2008-05-23 01:01:01″ //这样能够设置所有时间
date -s “20080523 01:01:01″ //这样能够设置所有时间
3.加减:
date +%Y%m%d //显示前天年月日
date +%Y%m%d --date="+1 day" //显示前一天的日期
date +%Y%m%d --date="-1 day" //显示后一天的日期
date +%Y%m%d --date="-1 month" //显示上一月的日期
date +%Y%m%d --date="+1 month" //显示下一月的日期
date +%Y%m%d --date="-1 year" //显示前一年的日期
date +%Y%m%d --date="+1 year" //显示下一年的日期
5.使用实例:
实例1:显示当前时间
命令:
date
date '+%c'
date '+%D'
date '+%x'
date '+%T'
date '+%X'
输出:
[root@localhost ~]# date
2012年 12月 08日 星期六 08:31:35 CST
[root@localhost ~]# date '+%c'
2012年12月08日 星期六 08时34分44秒
[root@localhost ~]# date '+%D'
12/08/12[root@localhost ~]# date '+%x'
2012年12月08日
[root@localhost ~]# date '+%T'
08:35:36[root@localhost ~]# date '+%X'
08时35分54秒
[root@localhost ~]#
说明:
实例2:显示日期和设定时间
命令:
date --date 08:42:00
输出:
[root@localhost ~]# date '+%c'
2012年12月08日 星期六 08时41分37秒
[root@localhost ~]# date --date 08:42:00
2012年 12月 08日 星期六 08:42:00 CST
[root@localhost ~]# date '+%c' --date 08:45:00
2012年12月08日 星期六 08时45分00秒
[root@localhost ~]#
说明:
实例3:date -d参数使用
命令:
输出:
[root@localhost ~]# date -d "nov 22"
2012年 11月 22日 星期四 00:00:00 CST
[root@localhost ~]# date -d '2 weeks'
2012年 12月 22日 星期六 08:50:21 CST
[root@localhost ~]# date -d 'next monday'
2012年 12月 10日 星期一 00:00:00 CST
[root@localhost ~]# date -d next-day +%Y%m%d
20121209[root@localhost ~]# date -d tomorrow +%Y%m%d
20121209[root@localhost ~]# date -d last-day +%Y%m%d
20121207[root@localhost ~]# date -d yesterday +%Y%m%d
20121207[root@localhost ~]# date -d last-month +%Y%m
201211[root@localhost ~]# date -d next-month +%Y%m
201301[root@localhost ~]# date -d '30 days ago'
2012年 11月 08日 星期四 08:51:37 CST
[root@localhost ~]# date -d '-100 days'
2012年 08月 30日 星期四 08:52:03 CST
[root@localhost ~]# date -d 'dec 14 -2 weeks'
2012年 11月 30日 星期五 00:00:00 CST
[root@localhost ~]# date -d '50 days'
2013年 01月 27日 星期日 08:52:27 CST
说明:
date 命令的另外一个扩展是 -d 选项,该选项很是有用。使用这个功能强大的选项,经过将日期做为引号括起来的参数提供,您能够快速地查明一个特定的日期。-d 选项还能够告诉您,相对于当前日期若干天的到底是哪一天,从如今开始的若干天或若干星期之后,或者之前(过去)。经过将这个相对偏移使用引号括起来,做为 -d 选项的参数,就能够完成这项任务。
具体说明以下:
date -d "nov 22" 今年的 11 月 22 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)
使用 ago 指令,您能够获得过去的日期:
date -d '30 days ago' (30天前的日期)
使用负数以获得相反的日期:
date -d 'dec 14 -2 weeks' (相对:dec 14这个日期的两周前的日期)
date -d '-100 days' (100天之前的日期)
date -d '50 days'(50天后的日期)
实例4:显示月份和日数
命令:
date '+%B %d'
输出:
[root@localhost ~]# date '+%B %d'
十二月 08[root@localhost ~]#
说明:
实例5:显示时间后跳行,再显示目前日期
命令:
date '+%T%n%D'
输出:
[root@localhost ~]# date '+%T%n%D'
09:00:30
12/08/12[root@localhost ~]#
说明:
二、举例date # 以默认格式显示当前日期
date -d "1 day" # 以默认格式显示一天后的日期(还能够 second,minute,..直到year,能够加s表示复数)
date -d "1970-01-01 UTC 1128621784 seconds" # 以默认格式显示从1970-01-01 UTC起后1128621784秒的日期
date -d "3 day ago" +%Y%m%d # 以指定格式显示3天前的日期
date -d "1 month" +%Y-%m-%d # 以指定格式显示一个月后的日期
date -d "1 month" +%s # 以指定格式显示一个月后的日期(此格式为从1970年1月1日00:00:00到目前经历的秒数,%S为当前的秒数(0~59))
date -d "1970-01-01 CST 1 second" +%s # 显示从1970-01-01 CST起1秒后的秒数(-28799,注意时区"CST")
date -d "2 hours" # 2小时前
date -d "1 minutes" # 1分钟前
date -d "2 seconds" # 2秒钟前date -d "20120616" +%s # 以指定格式显示日期
将时间戳转换成date
#date -d '1970-01-01 UTC 1199116800 seconds'
2008年 01月 01日 星期二 00:00:00 CST
#export
#date -d '19700101 UTC 1199116800 seconds'
Tue Jan 1 00:00:00 CST 2008mi
只输入date,显示当前时间
-d 或 --date 用来显示某个特定日期时间,而且能够格式输出
好似很简单的命令,G了一大圈才找到,记下几种方式供你们借鉴,有好的其余命令欢迎跟贴:
设置系统时间为2007年4月14日13点58分的命令
date -s "20070414 13:58:00"
date -s "2007-04-14 13:58:00"
date -s "2007/04/14 13:58:00"
开始的时候忘记加引号了,晕。
在命令行输入:
Date:显示当前时间 Fri Aug 3 14:15:16 CST 2007
date –s:按字符串方式修改时间
能够只修改日期,不修改时间,输入: date -s 2007-08-03
只修改时间,输入:date -s 14:15:00
同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:
#date -s "2007-08-03 14:15:00"
二、查看硬件时间
# hwclock
设置硬件时间
# hwclock -set -date="07/07/06 10:19" (月/日/年 时:分:秒)
三、硬件时间和系统时间的同步
按照前面的说法,从新启动系统,硬件时间会读取系统时间,实现同步,可是在不从新启动的时候,须要用hwclock命令实现同步。
硬件时钟与系统时钟同步:
# hwclock --hctosys(hc表明硬件时间,sys表明系统时间)
系统时钟和硬件时钟同步:(让系统的时间同步到硬件时钟)
# hwclock –systohc
扩展阅读一:hwclock 使用
Linux机器上的时间比较复杂,有各式各样的时钟和选项等等。
一:
机器里有两个时钟:硬件时钟和系统时钟
硬件时钟从根本上讲是CMOS时钟;
系统时钟是由内核维护的,它是从1969年底(即传说中的标志Unix时代开端的那个拂晓)开始算起的累积秒数。
在DOS或Mac系统中,起做用的是硬件时钟。遗憾的是,你可能已经发现了,绝大多数电脑时钟都是很不许确的。它们从根本上讲是由小型电池供电的警报器时钟,这种锂电池通常可持续供电三年左右,那时候你系统各大块差很少都已通过时了。
而在Linux系统中,起做用的是系统时钟。在启动时,它靠读取硬件时钟得到计时起点,而不是靠记忆计时。
你能够经过BIOS修改系统硬件时钟,或者若是你不想重起机器,那就用hwclock命令。
当你使用hwclock命令调整硬件时间不少次之后,hwclock就会获取你的时钟推移速率,而后就会把这个信息存在/etc/adjtime里边。之后,你就能够用它来随时更新你的硬件时间,用一条下面的命令:
hwclock --adjust
硬件时钟一般被设置成全球标准时间(UTC),而将时区信息保存在/usr/share/lib/timezone (或者在某些系统中多是/usr/local/timezone)目录下某个适当的文件中,而后用一个符号连接文件/etc/localtime指向它。
查看硬件时钟用命令:
hwclock --show 或者 hwclock -r
重置硬件时钟用:
#date 042817252009.00 //设置系统时钟 2009 年 04 月 28 日 星期四 17:25:00 CST
#hwclock -w
若是须要修改你的时区信息,可使用tzset命令,若是你系统中没有这条命令,那能够用相似下面的操做:
ln -s /etc/localtime /usr/share/zoneinfo/US/Pacific
二:
实例:
板子上电
#date 042817252009.00 //设置系统时钟 2009 年 04 月 28 日 星期四 17:25:00 CST
#hwclock -w //将系统时钟写入硬件时钟
#hwclock -r //看时间是否在变化
若是没有出错, 就已经把2009 年 04 月 28 日 星期四 17:25:00 CST 写入RTC chip了
为了使系统时间和RTC时间同步,能够在初始化文件中添加命令
hwclock –s
使每次开机时读取RTC时间,并同步给系统时间。
在根文件系统:usr/etc/rc.local中添加
/sbin/hwclock -s
断电
等2分钟在上电
#hwclock -r //看时间是否同步,即便与2分钟后的时间相同
扩展阅读二:linux中时间设置date、hwclock、clock
Windows时钟你们可能十分熟悉了,Linux时钟在概念上相似Windows时钟显示当前系统时间,但在时钟分类和设置上却和Windows截然不同。和Windows不一样的是,Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟,这个时钟能够在BIOS的"Standard BIOS Feture"项中进行设置。
既然Linux有两个时钟系统,那么你们所使用的Linux默认使用哪一种时钟系统呢?会不回出现两种系统时钟冲突的状况呢?这些疑问和担忧不无道理。首先,Linux并无默认哪一个时钟系统。当Linux启动时,硬件时钟会去读取系统时钟的设置,而后系统时钟就会独立于硬件运做。
从Linux启动过程来看,系统时钟和硬件时钟不会发生冲突,但Linux中的全部命令(包括函数)都是采用的系统时钟设置。不只如此,系统时钟和硬件时钟还能够采用异步方式,即系统时间和硬件时间能够不一样。这样作的好处对于普通用户意义不大,但对于Linux网络管理员却有很大的用处。例如,要将一个很大的网络中(跨越若干时区)的服务器同步,假如位于美国纽约的Linux服务器和北京的Linux服务器,其中一台服务器无须改变硬件时钟而只需临时设置一个系统时间,如要将北京服务器上的时间设置为纽约时间,两台服务器完成文件的同步后,再与原来的时钟同步一下便可。这样系统和硬件时钟就提供了更为灵活的操做。
在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只不过clock命 令除了支持x86硬件体系外,还支持Alpha硬件体系。因为目前绝大多数用户使用x86硬件体系,因此能够视这两个命令为一个命令来学习。
1.在虚拟终端中使用date命令来查看和设置系统时间
查看系统时钟的操做:
# date
设置系统时钟的操做:
# date 091713272003.30
通用的设置格式:
# date 月日时分年.秒
2.使用hwclock或clock命令查看和设置硬件时钟
查看硬件时钟的操做:
# hwclock --show 或
# clock --show
2003年09月17日 星期三 13时24分11秒 -0.482735 seconds
设置硬件时钟的操做:
# hwclock --set --date="09/17/2003 13:26:00"
或者
# clock --set --date="09/17/2003 13:26:00"
通用的设置格式:hwclock/clock --set --date=“月/日/年时:分:秒”。
3.同步系统时钟和硬件时钟
Linux系统(笔者使用的是Red Hat 8.0,其它系统没有作过实验)默认重启后,硬件时钟和系统时钟同步。若是不大方便从新启动的话(服务器一般不多重启),使用clock或hwclock命令来同步系统时钟和硬件时钟。
硬件时钟与系统时钟同步:
# hwclock --hctosys
或者
# clock --hctosys
上面命令中,--hctosys表示Hardware Clock to SYStem clock。
系统时钟和硬件时钟同步:
# hwclock --systohc
或者
# clock --systohc
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文连接:http://www.linuxidc.com/Linux/2012-09/69914p2.htm
本文连接:http://codingstandards.iteye.com/blog/804830 (转载请注明出处)
hwclock命令,与clock命令是同一个命令,主要用来查询和设置硬件时钟(query and set the hardware clock (RTC))。RTC=Real Time Clock,也就是硬件时钟。在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是一般可在BIOS画面设定的时钟。系统时钟则是指kernel中 的时钟。全部Linux相关指令与函数都是读取系统时钟的设定。由于存在两种不一样的时钟,那么它们之间就会存在差别。根据不一样参数设置,hwclock命令既能够将硬件时钟同步到系统时钟,也能够将系统时钟同步到硬件时钟。
关于系统时钟与硬件时钟的关系的说法,网上分红了两种:
第一种:当Linux启动时,硬件时钟会去读取系统时钟的设置,而后系统时钟就会独立于硬件运做。
第二种:当Linux启动时,系统时钟会去读取硬件时钟的设定,以后系统时钟即独立运做。
到底那一种才是正确的呢?执行一下man hwclock能够看到里面有一段:
man hwclock 写道
The System Time is the time that matters. The Hardware Clock’s basic purpose in a Linux system is to keep time
when Linux is not running. You initialize the System Time to the time from the Hardware Clock when Linux
starts up, and then never use the Hardware Clock again. Note that in DOS, for which ISA was designed, the
Hardware Clock is the only real time clock.
这段文字说明,第二种说法是正确的,第一种说法是错误的。但网上大部分文章都是第一种说法,因此说,网络虽好,要注意甄别。
man hwclock 写道
It is important that the System Time not have any discontinuities such as would happen if you used the date(1L)
program to set it while the system is running. You can, however, do whatever you want to the Hardware Clock
while the system is running, and the next time Linux starts up, it will do so with the adjusted time from the
Hardware Clock.
若是使用date命令修改了系统时间,并不会自动去修改硬件时钟,所以,当系统下次重启时,系统时钟还会从硬件时钟去取,date设置的时间就无效了。这大概就是为何须要hwclock命令的缘由吧。
-r, --show 读取并打印硬件时钟(read hardware clock and print result )
-s, --hctosys 将硬件时钟同步到系统时钟(set the system time from the hardware clock )
-w, --systohc 将系统时钟同步到硬件时钟(set the hardware clock to the current system time )
[root@new55 ~]# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock
[root@new55 ~]# ls -l /sbin/hwclock /usr/sbin/hwclock
-rwxr-xr-x 1 root root 34096 2010-01-07 /sbin/hwclock
lrwxrwxrwx 1 root root 18 08-13 00:14 /usr/sbin/hwclock -> ../../sbin/hwclock
[root@new55 ~]# type -a clock
clock is /sbin/clock
[root@new55 ~]# ls -l /sbin/clock
lrwxrwxrwx 1 root root 7 08-13 00:14 /sbin/clock -> hwclock
[root@new55 ~]#
[root@new55 ~]# hwclock
2010年11月06日 星期六 21时09分28秒 -0.134840 seconds
[root@new55 ~]# hwclock -r
2010年11月06日 星期六 21时09分33秒 -0.469123 seconds
[root@new55 ~]# hwclock --show
2010年11月06日 星期六 21时09分45秒 -0.127548 seconds
[root@new55 ~]#
[root@new55 ~]# date
2010年 11月 06日 星期六 21:11:57 CST
[root@new55 ~]# date 11062112 <== 格式 mmddHHMM,即 月日时分
2010年 11月 06日 星期六 21:12:00 CST
[root@new55 ~]# hwclock -w
[root@new55 ~]# hwclock
2010年11月06日 星期六 21时12分13秒 -0.648818 seconds
[root@new55 ~]#
注:要使系统时间准确,最好仍是使用ntp方式。
ntpdate命令是使用NTP协议来从网络同步时间的命令。NTP=Network Time Protocol 网络时间协议。
[root@new55 ~]# ntpdate 0.rhel.pool.ntp.org
6 Nov 21:17:55 ntpdate[4829]: step time server 123.146.124.28 offset -1.025258 sec
[root@new55 ~]# date
2010年 11月 06日 星期六 21:17:59 CST
[root@new55 ~]# hwclock -w
[root@new55 ~]#
在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主机板上的时钟设备,也就是一般可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。全部Linux相关指令与函数都是读取系统时钟的设定。由于存在两种不一样的时钟,那么它们之间就会存在差别。当Linux启动时,系统时钟会去读取硬件时钟的设定,以后系统时钟即独立运做。
用date命令对系统时间进行设置后,并不会去修改硬件时钟,因此系统重启后,系统时间还算会去读取硬件时间,这就是为什么date设置失效到缘由。
所以,须要在设置系统时间后,将系统时间同步到硬件时钟。
clock/hwclock:
显示与设定硬件时钟(query and set the hardware clock (RTC)),两个命令相同。RTC=Real Time Clock,也就是硬件时钟。
命令参数:
-r, --show 读取并打印硬件时钟(read hardware clock and print result)
-s, --hctosys 将硬件时钟同步到系统时钟(set the system time from the hardware clock)
-w, --systohc 将系统时钟同步到硬件时钟(set the hardware clock to the current system time)
命令示例:
1. 查看硬件时钟
2014年03月27日 星期四 11时03分50秒 -0.328520 seconds
[root@localhost ~]# hwclock -r
2014年03月27日 星期四 11时03分53秒 -0.797264 seconds
[root@localhost ~]# hwclock --show
2014年03月27日 星期四 11时04分01秒 -0.672267 seconds
2. clock与hwclock相同
复制代码
[root@localhost ~]# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock
[root@localhost ~]# ll /sbin/hwclock /usr/sbin/hwclock
-rwxr-xr-x. 1 root root 46940 11月 22 23:27 /sbin/hwclock
lrwxrwxrwx. 1 root root 18 3月 26 19:27 /usr/sbin/hwclock -> ../../sbin/hwclock
[root@localhost ~]# type -a clock
clock is /sbin/clock
[root@localhost ~]# ll /sbin/clock
lrwxrwxrwx. 1 root root 7 3月 26 19:27 /sbin/clock -> hwclock
复制代码
3. 同步系统时间到硬件时钟
复制代码
[root@localhost ~]# hwclock
2014年03月27日 星期四 18时50分51秒 -0.312960 seconds
[root@localhost ~]# date
2014年 03月 27日 星期四 10:50:55 CST
[root@localhost ~]# hwclock -w
[root@localhost ~]# hwclock
2014年03月27日 星期四 10时51分15秒 -0.875387 seconds
复制代码
同步网络时间到系统时间
[root@localhost ~]# ntpdate 210.72.145.44
27 Mar 11:11:24 ntpdate[4766]: adjust time server 210.72.145.44 offset 0.011401 sec
210.72.145.44 (中国西安授时中心的官方时间同步服务器IP域名)
同步网络时间到系统时间后,就能够用hwclock -w将系统时间同步到硬件时间。
修改时区
可能部分系统在执行以上两步后,在重启后仍然失效,因此须要进行时区修改。
[root@localhost ~]# tzselect #按照提示进行选择时区
[root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改系统时间配置文件
[root@localhost ~]# /etc/sysconfig/clock
#打开clock文件,将相关内容改为如下内容
UTC=true
ARC=false
ZONE="Asia/Shanghai"
重启系统
[root@localhost ~]# reboot
date +%Y-%m-%d%t%A%t%T 能够固定不过建议 使用 alias 进行设置 而不是去修改默认的date脚本。既alias date='date +%Y-%m-%d%t%A%t%T '要使之后都生效 能够到/etc/bashrc 设置 也能够到用户目录下 设置 .bashrc
date +%Y%m%d%t%A%t%T
你能够在在 某个启动脚本里面加上下面这条命令,好比在 /etc/bashrc 脚本里面,加上
alias date="date \"+%Y-%m-%d %H:%M:%S\""
而后运行改文件,
. /etc/bashrc
date "+%Y-%m-%d %H:%M:%S"
做者:Agoly 出处:https://www.cnblogs.com/qmfsun/ 本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。 若是文中有什么错误,欢迎指出。以避免更多的人被误导。 |