据我了解,当文件元数据或文件内容更改时,ctime 会更改,而文件内容修改时,mtime 会更改。
我想知道当文件内容更改时更新ctime的原因,我们不是已经有mtime跟踪了吗?
在我的 MAC 上
usxxkothan3m1:temp kothan3$ touch foo.txt
usxxkothan3m1:temp kothan3$ stat -x foo.txt
File: "foo.txt"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: (276196474/ kothan3) Gid: (720748206/CORP\Domain Users)
Device: 1,4 Inode: 11745569 Links: 1
Access: Mon Aug 24 11:59:07 2015
Modify: Mon Aug 24 11:59:07 2015
Change: Mon Aug 24 11:59:07 2015
usxxkothan3m1:temp kothan3$ echo "write something here" >> foo.txt
usxxkothan3m1:temp kothan3$ stat -x foo.txt
File: "foo.txt"
Size: 21 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: (276196474/ kothan3) Gid: (720748206/CORP\Domain Users)
Device: 1,4 Inode: 11745569 Links: 1
Access: Mon Aug 24 11:59:24 2015
**Modify: Mon Aug 24 11:59:21 2015**
**Change: Mon Aug 24 11:59:21 2015**
usxxkothan3m1:temp kothan3$ chmod u-w foo.txt
usxxkothan3m1:temp kothan3$ stat -x foo.txt
File: "foo.txt"
Size: 21 FileType: Regular File
Mode: (0444/-r--r--r--) Uid: (276196474/ kothan3) Gid: (720748206/CORP\Domain Users)
Device: 1,4 Inode: 11745569 Links: 1
Access: Mon Aug 24 11:59:24 2015
Modify: Mon Aug 24 11:59:21 2015
**Change: Mon Aug 24 11:59:37 2015**
答案1
ctime
,或状态改变时间,是指文件元数据发生改变的时间。例如$ ls -ltc
Linux下会按照文件状态信息的最后修改时间进行排序并显示。
更深入一点,ctime
是自数据块和/或文件元数据发生更改以来索引节点报告的时间。文件元数据的更改在这里可以指自对文件名、文件权限、文件属性、SELinux 上下文以及与该特定文件相关的许多其他类型的文件系统元数据进行更改以来所经过的时间之类的事情。由于ctime
每当数据块时该字段都会更新或者mtime
元数据发生变化,每当更新时都会更新。然而,如果对所述文件的最近更改仅涉及元数据更改,例如文件重命名、chmod
用户调用的权限更改等,则仅有的 ctime
和不是 mtime
将被更新。
ctime
已更改但未更改的情况mtime
会提示您文件元数据已以某种方式更改,但组成文件本身的基础数据尚未更改。我想这对于自动数据备份、计算机取证等很有用。