windows系统用的时间久了,根深蒂固的思想就是创建一个文件都会有一个创建时间,但是在Linux系统下却不是这样的,它没有文件的创建时间这一说,关于文件的时间有三个参数来决定它,分别是:
(1)atime(access time):最后一次访问的时间,访问时间指文件被读取而更新的时间,下面看一下cat命令后时间是如何变化的:
(2)mtime(modification time):最近一次文件的内容发生改变而更新的时间,我们通过vim编辑一个代码看看时间如何改变:
(3)ctime(change time):状态修改时间,这里指文件的属性或者权限发生变化时而更新的时间,上面提到通过vim增加文件大小从而改变了ctime,下面我通过修改权限来看看ctime会不会变化。
在Linux下查看三个时间具体操作命令分别为:
ls -lc 获取文件最后一次状态的改变时间(access time(atime))
ls -l 获取文件最后一次内容修改的时间(modification time(mtime))
ls -lu 获取文件最后一次访问的时间(change time(ctime))
具体可看下图:
Linux是如何更新访问时间的,这里须得明白下面一点,其更新策略为,当满足以下任意一条件时才更新访问时间。
- 访问时间早于修改时间或改变时间
- 距离上次更新时间间隔大于24h
以下是各个操作对三个时间参数影响
操作 | atime | mtime | ctime |
mv | 没变 | 没变 | 变了 |
cp | 变了 | 没变 | 没变 |
touch | 变了 | 变了 | 变了 |
cat/more/less | 变了 | 没变 | 没变 |
ls | 没变 | 没变 | 没变 |
chmod/chown | 没变 | 没变 | 变了 |
ln | 没变 | 没变 | 变了 |
echo | 没变 | 没变 | 没变 |
vi | 没变 | 变了 | 变了 |
有时候我们会发现atime,mtime,ctime和我们的标准时间是对不上的,那么遇到这种情况我们该如何去对它们进行修改呢?这里需要介绍的一个命令就是touch,它可以做到。
首先我们先了解一下,touch有什么功能。
1.Linux中的touch指令有两个功能,一是修改文件的时间戳,二是创建一个不存在的文件。
(1)命令格式: touch [参数选项] 文件名
(2)命令参数
-a 或–time=atime或–time=access或–time=use只更改存取时间。
-c 或–no-create 不创建任何文档
-m 或–time=mtime或–time=modify 只更改变动时间。
-r 将指定文件或目录的日期时间设置成参考文件或目录的时间日期。
-t 使用指定的日期时间而不是现在的时间。
(3)touch命令可以更改文档或目录的日期时间,包括存取时间和更改时间,这里我们详细去看看。
1>先看下图
总结一下:对于一个已经存在的文件,执行touch filename后会修改文件的日期和时间,但不会影响文件的内容。
2>touch -a filename:更新文件的atime和ctime
3>touch -m filename:更新文件的mtime和ctime
3>touch -r 参考文件名 目标文件名 :将目标文件的的atime和mtime更改为参考文件的时间并更新ctime.
5>touch -t 时间 文件名
使用指定的时间值 time 作为指定文件 file 相应时间戳记的新值.此处的 time 规定为如下形式的十进制数∶
[ [CC] YY] MMDDhhmm [.SS]
这里CC为年数中的前两位,即”世纪数”;YY为年数的后两位,即某世纪中的年数.如果不给出CC的值,则touch将把年数CCYY限定在1969--2068之内(可参考touch的info).MM为月数,DD为天.MM为月数,DD为天数,hh为小时数(几点),mm为分钟数,SS为秒数.此处秒的设定范围是0--61,这样可以处理闰秒.这些数字组成的时间是环境变量TZ指定的时区中的一个时间.由于系统的限制,早于1970年1月1日的时间是错误的.
6>touch -d time filename
这里也是可以将atime和mtime改为你指定的时间并更新ctime,但是时间格式和上面有所不同,不能将时分赘在后面,也就是没有上面指令那么精确。
更多的touch指令可参考指令man touch里面的信息。