Linux下的atime mtime ctime及如何用touch来修改

Linux系统中,文件没有创建时间,而是通过atime(访问时间)、mtime(修改时间)和ctime(状态修改时间)来记录文件状态。atime是在文件被读取时更新,mtime在内容更改时更新,ctime则在文件属性或权限变化时更新。通过`ls`命令可以查看这三个时间。`touch`命令可以用来修改这些时间戳,例如 `-a` 更新访问和状态修改时间,`-m` 更新修改和状态修改时间,`-r` 参考其他文件时间,`-t` 指定时间戳,`-d` 指定日期时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       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里面的信息。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值