Gil*_*il' 10
影响文件 mtime 的修改是文件数据的更改:写入非零字节数,或最终修改文件的截断。创建文件也将其 mtime 设置为当前日期。假设文件未创建或截断,仅打开文件进行写入不会影响 mtime。
从文件读取(如果读取的字节数非零)或执行文件将其 atime 设置为当前时间。仅仅打开一个文件进行阅读永远不会影响时间。在 Linux 上,现在在大多数情况下默认禁用;在atime安装选项恢复更新atime而noatime安装选项禁用它们完全。
程序可以改变文件的 mtime 和 atime;执行此操作的基本命令是touch. 一些文件复制程序将副本设置为与原始文件相同的 mtime,例如cp -p或rsync -t。
影响文件 ctime 的更改是文件元数据的更改:权限、所有者、时间、链接计数等。重命名文件也会更新其 ctime。文件数据的更改也会影响 ctime,但从文件读取不会更改 ctime,即使它更改了 atime。除了将 ctime 设置为当前时间之外,不可能以任何方式更改 ctime(即使 root 受到约束,但 root 可以通过首先更改系统时间或直接访问包含文件系统的分区来间接设置 ctime)。
重命名会更新更改时间:
$ mkdir tmp
$ cd tmp
$ echo abc > a
$ stat a
File: `a'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 26h/38d Inode: 5038682 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000 / zelda Gid: ( 1000/ zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
Birth: -
$ mv a b
$ stat b
File: `b'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 26h/38d Inode: 5038682 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ zelda) Gid: ( 1000/ zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
Birth: -
Run Code Online (Sandbox Code Playgroud)
读取文件内容时会更新访问时间。实际更新文件时修改(打开修改时间不足以改变修改时间)。