对atime、mtime和ctime的研究

时间:2021-07-28 16:27:01

 

前期准备

在实验之前我们在讨论为何会出现两种修改时间,为此我们推测因为修改的不是文件的同一数据,或者说同一地方,那么我们就要先搞清楚文件的结构。

linux文件系统是Linux系统的心脏部分,提供了层次结构的目录和文件。文件系统将磁盘空间划分为每1024个字节一组,称为块(也有用512字节为一块的,如:SCOXENIX)。编号从0到整个磁盘的最大块数。

     全部块可划分为四个部分,块0称为引导块,文件系统不用该块;块1称为专用块,专用块含有许多信息,其中有磁盘大小和全部块的其他两部分的大小。从块2开始是i节点表,i节点表中含有i节点,表的块数是可变的。i节点表之后是空闲存储块(数据存储块),可用于存放文件内容。i节点是一个64字节长的表,含有有关一个文件的信息,其中有文件大小、文件所有者、文件存取许可方式,以及文件为普通文件、目录文件还是特别文件等。linux系统中,系统把文件内容数据与i节点数据是分别存放的,i节点数据存放了文件权限与文件属主之类的数据。结合这些知识,我们猜测修改时间或者改变时间一个对应了对文件内容的修改,一个对应对文件权限或属性的修改即对i节点数据的修改。

在此之前还有一个时间,即文件的访问时间,这个没有争议,就是文件最后的访问时间。下面我们开始进行实验。

实验过程:

首先我们创建一个文件  test

对atime、mtime和ctime的研究

stat命令查看下属性

对atime、mtime和ctime的研究

可以看到三个时间都是一样的    23:06:32

修改前

对atime、mtime和ctime的研究

修改后

对atime、mtime和ctime的研究

看下时间

对atime、mtime和ctime的研究

我们发现只有change时间发生变化。下面我们对test.c的内容进行更改 

更改前                                     更改后

对atime、mtime和ctime的研究           对atime、mtime和ctime的研究

看一下时间变化

对atime、mtime和ctime的研究

修改时间和改变时间都变化了,与假设不相符,证明假设是错误的,那我们再次提出假设,只要文件发生变化,change时间就会改变,只有对文件内容更改时Modify(修改时间)才会变化。

下面验证这一假设

我们用mv指令对test.c进行操作

对atime、mtime和ctime的研究

看下时间变化

对atime、mtime和ctime的研究

只有change时间发生了变化,接下来对test.c的内容进行更改

对atime、mtime和ctime的研究 

对atime、mtime和ctime的研究

可以看到修改时间和change时间都发生了变化,我们再实验一下,这次用ln指令(软连接)

对atime、mtime和ctime的研究

可以看到改变文件的属性只有change时间改变,而modify时间未变。

为了保证严谨性,我们换个文件再试验一次

对atime、mtime和ctime的研究

我们更改文件内容

对atime、mtime和ctime的研究

可以看多到两个时间都改变了,下面我们更改文件权限

对atime、mtime和ctime的研究

对atime、mtime和ctime的研究

查看时间

对atime、mtime和ctime的研究

可以看到只有change时间改变了

综上,我们可以得出结论

Access时间是最后的访问时间,Modify是指最后修改文件内容的时间,Change是指最后对文件进行修改操作的时间。

最后附上基本操作对这三个时间的影响

操作

Atime

Mtime

Ctime

Mv

________

________

Cp

________

________

Touch

√(被设置的时间)

√(被设置的时间)

Cat/more/less

________

________

Ls

________

________

________

Chmod/chmown

________

________

Ln

________

________

Echo

________

________

________

vi

________

________