Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟,当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
如何查看系统的日期和时间?
$ date
Tue Oct 16 11:18:32 CST 2012
date支持格式化输出,如
$ date +”%r %n%a %b %d, %Y”
11:27:14 AM
Tue Oct 16, 2012
显示指定的日期与时间
$ date -d “+1 month”
Fri Nov 16 11:31:10 CST 2012
详见: http://www.linuxidc.com/Linux/2012-11/74918p2.htm
显示日历
$ cal
October 2012
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
详见: http://www.linuxidc.com/Linux/2012-11/74918p3.htm
如何修改系统日期和时间?
使用date命令的-s参数.
#date -s 12/4/2011 #date -s 14:15:00
或
date -s ’2011/12/4 14:15:00′
如何查看硬件时钟?
# hwclock –show
Tue 16 Oct 2012 09:19:57 PM CST -0.844514 seconds
如何设置硬件时钟?
# hwclock –set –date=”09/17/2003 13:26:00″
# hwclock –hctosys //硬件时钟与系统时钟同步
# hwclock –systohc //系统时钟与硬件时钟同步
硬件时钟也可以通过clock命令来查看和设置.
时区
UTC Universal Time Coordinated,世界标准时间
GMT Greenwich Mean Time,格林尼治时间
CST China standard Time ,中国标准时间
比如设置设置时区为CST
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
NTP
Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正,且可介由加密确认的方式来防止恶毒的协议攻击。
官方网站: http://www.pool.ntp.org/en/
可使用ntpdate同步,服务器可加crontab
# ntpdate cn.pool.ntp.org
使用time命令获取命令执行时间
$ time ls -Rl dir/* [...] real 0m22.156s user 0m1.652s sys 0m4.772s
Linux 文件的时间概念
(1) modification time (mtime,修改时间),是文件内容修改的时间,用命令ls -l默认显示的就是这个时间.
(2)status time (ctime,状态时间):当一个文件的状态改变时,这个时间就会改变,例如更改了文件的权限与属性等,它就会改变。
(3)access time (atime,访问时间):当读取文件内容时,就会更改这个时间,例如使用cat 去读取/etc/man.config,那么该文件的atime就会改变。
可使用 ls -l –time=atime –full-time 和 ls -l –time=ctime –full-time 来查看.另外可以用stat命令来查看.
$ stat README.md
File: `README.md’
Size: 25 Blocks: 8 IO Block: 4096 regular file
Device: 809h/2057d Inode: 2755432 Links: 1
Access: (0664/-rw-rw-r–) Uid: ( 1000/ diglike) Gid: ( 1000/ diglike)
Access: 2012-09-21 15:36:42.238294913 +0800
Modify: 2012-09-21 15:35:31.626295155 +0800
Change: 2012-09-21 15:35:31.750295154 +0800
Birth: –
$ ls –full-time README.md
-rw-rw-r– 1 diglike diglike 25 2012-09-21 15:35:31.626295155 +0800 README.md
$ ls –time=atime –full-time README.md
-rw-rw-r– 1 diglike diglike 25 2012-09-21 15:36:42.238294913 +0800 README.md
$ ls –time=ctime –full-time README.md
-rw-rw-r– 1 diglike diglike 25 2012-09-21 15:35:31.750295154 +0800 README.md
如何修改Linux文件的访问时间和修改时间?
可以使用touch命令来修改.
-a 参数只修改atime
-m 参数只修改mtime
-c 参数不创建文件
-t [[CC]YY]MMDDhhmm[.ss] 修改为指定时间
如:
touch -t 1210011224.30 abc
touch -d “5 days ago” abc
定制ls输出的日期和时间格式
每个Linux系统可能不一样,由TIME_STYLE 环境变量控制.以下是Ubuntu 12.04的默认输出格式:
$ll README.md
-rw-rw-r– 1 diglike diglike 25 Sep 21 15:35 README.md
我修改后显示为
$ ll README.md
-rw-rw-r– 1 diglike diglike 25 2012-09-21 15:35 README.md
因为我在.bashrc 中添加了export TIME_STYLE=long-iso
还可以定制如
$ export TIME_STYLE="+%Y-%m-%d %H:%M:%S %z"
Date
目录
1 功能
2 语法
3 参数
4 相关命令
5 实例
功能
显示、修改系统日期时间。
语法
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
参数
-d <字符串>或–date=<字符串> 显示字符串所指的日期与时间,字符串前后必然加上双引号。
date -d YYYY-mm-dd
指定时间,日期是今天:
date -d HH:MM:SS
指定日期时间:
date -d "YYYY-mm-dd HH:MM:SS"
-s <字符串>或–set=<字符串> 根据字符串来设置日期与日期,字符串前后必然加上双引号。
-u 显示GMT(格林威治标准时间)
常用FORMAT
%a 星期的简要名称
%A 星期的完整名称
%b 月份的简要名称
%B 月份的完整名称
%c 显示系统的日期与时间,其格式为%a %b %e %T %Z
%d dd格式的日期,01-31
%D 日期(含年月日),其格式为%m/%D/%Y
%e 该月中的第几天
%Y YYYY格式的年份(Year)
%m mm格式的月份,01-12
%H HH格式的小时数,00-23
%I 小时,以0-12来表示
%M MM格式的分钟数,00-59
%S SS格式的秒数,00-59
%F YYYY-mm-dd格式的完整日期(Full date),同%Y-%m-%d
%T HH-MM-SS格式的时间(Time),同%H:%M:%S
%s 自1970年以来的秒数。C函数time(&t) 或者Java中 System.currentTimeMillis()/1000, new Date().getTime()/1000
%w 星期几,0-6,0表示星期天
%u 星期几,1-7,7表示星期天
%j 该年中的第几天
%n 在显示时,插入新的一行
%P 上午或下午(AM/PM)
%U 该年中的第几周
%w 该周的第几天,0表示周日
相关命令
clock hwclock
实例
# date
Sat Dec 3 14:04:21 CST 2011
显示当前的日期和时间。
# date -u
Sat Dec 3 06:06:08 UTC 2011
以格林威治标准时间显示当前系统日期与时间。
# date +%U
48
本周是今年的第几周
# date Sat Dec 3 14:12:22 CST 2011 # date -s '2011/12/4 14:15:00' Sun Dec 4 14:15:00 CST 2011 # date Sun Dec 4 14:15:01 CST 2011 #clock -w
修改系统日期为2011年12月4日,并将当前系统时间写入CMOS中去。也可以分两步:
#date -s 12/4/2011 #date -s 14:15:00 #clock -w
# date -d tomorrow +%Y%m%d 20111204
按指定的格式显示明天的日期
Note: 按指定格式显示日期在关于备份的Linux Shell中很有用。
今天:
date date -d today date -d now
明天:
date -d tomorrow date -d next-day date -d next-days date -d "next day" date -d "next days" date -d "+1 day" date -d "+1 days" date -d "1 day" date -d "1 days" date -d "-1 day ago" date -d "-1 days ago"
昨天:
date -d yesterday date -d last-day date -d last-days date -d "last day" date -d "last days" date -d "-1 day" date -d "-1 days" date -d "1 day ago" date -d "1 days ago"
前天:
date -d "2 day ago" date -d "2 days ago" date -d "-2 day" date -d "-2 days"
大前天:
date -d "3 day ago" date -d "3 days ago" date -d "-3 day" date -d "-3 days"
上周,一周前:
date -d "1 week ago" date -d "1 weeks ago"
上个星期五(不是上周五):
date -d "last-friday" date -d "last friday"
上月,一月前:
date -d last-month date -d last-months date -d "-1 month" date -d "-1 months"
下月,一月后:
date -d next-month date -d next-months date -d "+1 month" date -d "+1 months"
去年,一年前:
date -d last-year date -d last-years date -d "-1 year" date -d "-1 years"
明年,一年后:
date -d next-year date -d next-years date -d "+1 year" date -d "+1 years"
一小时前:
date -d "last-hour" date -d "last-hours" date -d "1 hour ago" date -d "1 hours ago"
一小时后:
date -d "1 hour" date -d "1 hours"
一分钟前:
date -d "1 minute ago" date -d "1 minutes ago"
一分钟后:
date -d "1 minute" date -d "1 minutes"
一秒前:
date -d "1 second ago" date -d "1 seconds ago"
一秒后:
date -d "1 second" date -d "1 seconds"
#date -d "yesterday" +"%Y"
cal — 显示日历.
描述
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,通称阳历。
参数
-3 显示系统前一个月,当前月,下一个月的月历
-s 显示星期天为一个星期的第一天,默认的格式
-m 显示星期一为一个星期的第一天
-y 显示指定年份的日历,默认当前年.
-A number 显示当前月几个月后的日历
-B number 显示当前月几个月前的日历
实例
显示当前月日历
$ cal October 2012 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
显示2012年9月份日历
$ cal 9 2012 September 2012 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
显示当前月和后两个月日历
$ cal -A2 2012 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 30 31