重命名会影响文件的修改或访问时间吗?哪里有什么变化的清单?
重命名会影响文件的修改或访问时间吗?哪里有什么变化的清单?
Answers:
重命名不会更新更改时间:
$ 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: -
读取文件内容时,访问时间会更新。在实际更新文件时进行修改(打开进行修改不足以更改修改时间)。
cp
和mv
,并vi
进行编辑。其他编辑器或您的桌面可能会以不同方式处理任务,并更新了更多时间戳。
mv
影响文件的mtime的修改是文件数据的更改:写的字节数非零,或者截断最终修改了文件。创建文件还将其mtime设置为当前日期。假设未创建或截断文件,仅打开文件进行写入不会影响mtime。
从文件读取(如果读取的字节数为非零)或执行文件会将其时间设置为当前时间。仅打开文件进行读取就不会影响时间。在Linux上,现在在大多数情况下默认情况下处于禁用状态。在atime
安装选项恢复更新atime而noatime
安装选项禁用它们完全。
程序可以更改文件的mtime和atime。执行此操作的基本命令是touch
。某些文件复制程序会将副本设置为与原始文件相同的mtime,例如cp -p
或rsync -t
。
影响文件ctime的更改是文件元数据的更改:权限,所有者,时间,链接计数等。重命名文件也会更新其ctime。文件数据的更改也会影响ctime,但是从文件读取不会更改ctime,即使它更改了atime。除了将ctime设置为当前时间以外,无法以其他任何方式更改ctime(即使root受到约束,但root可以通过先更改系统时间或直接访问包含文件系统的分区来间接设置ctime)。
其他答案未提及的其他经验观察:
O_TRUNC
即使文件最初为空,打开文件进行写入也会更改mtime。
至少在Linux 3.10的ext3上似乎是如此。