天天看点

linux ctime 时间戳,文件的时间戳

### 文件的时间戳(atime/ctime/mtime)

> 文件的时间属性有三种:atime/ctime/mtime。atime是access time,即上一次的访问时间;mtime是modify time,是文件的修改时间;ctime是change time,也是文件的修改时间,只不过这个修改时间计算的inode修改时间,也就是元数据修改时间。文件还有一个创建时间(create time),大多数unix系统上都认为这是个无用的属性,一般工具无法获取这个时间,但是对于ext家族文件系统,通过它的底层调试工具debugfs可以获取create time。

>

> 但mtime只有修改文件内容才会改变,更准确的说是修改了它的data block部分;而ctime是修改文件属性时改变的,确切的说是修改了它的元数据部分,例如重命名文件,修改文件所有者,移动文件(移动文件没有改变datablock,只是改变了其inode指针,或文件名)等.当然,修改文件内容也一定会改变ctime(修改文件内容至少已经修改了inode记录上的mtime,这也是元数据),也就是说mtime的改变一定会引起ctime的改变。

>

> 对目录而言,考虑目录文件的data block,可知在目录中创建、删除文件以及目录内其他任意文件操作都会改变mtime,因为目录里的任何东西都是目录中的内容;而目录的ctime,除了目录的mtime引起ctime改变之外,对目录本身的元数据修改也会改变ctime。

>

> 总结下:

>

> (1).atime只在文件被打开访问时才改变,若不是打开文件编辑内容(如重定向内容到文件中),则ctime和mtime的改变不会引起atime的改变;

>

> (2).mtime的改变一定引起ctime的改变,而访问文件时(例如cat),atime不一定会改变,所以atime"改变"(这个改变是假象,见下文分析)不一定会影响ctime。

stat 查看时间戳,atime/ctime/mtime。

~~~

[[email protected] test]# stat index.md

File: ‘index.md’

Size: 10       Blocks: 8         IO Block: 4096   regular file

Device: fd01h/64769d Inode: 1356477     Links: 1

Access: (0644/-rw-r--r--) Uid: (   0/   root)   Gid: (   0/   root)

Access: 2019-06-04 15:37:53.678818897 +0800

Modify: 2019-06-04 15:37:51.149753586 +0800

Change: 2019-06-04 15:37:51.149753586 +0800

Birth: -

~~~