什么算作文件修改或更改?


Answers:


9

重命名不会更新更改时间:

$ 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: -

读取文件内容时,访问时间会更新。在实际更新文件时进行修改(打开进行修改不足以更改修改时间)。


复制文件并粘贴会更改其在新文件上的“修改”时间吗?使用Ctrl + X和粘贴是否会更改“更改”时间?

1
副本将使用带有新值的“修改”,“访问”和“更改”创建一个新文件(全部相同)。将某些内容粘贴到编辑器中(然后保存)会更新所有这三个文件(更改时的时间戳要比其他两个要晚,当然只有在保存后才进行更改)
Zelda

我的意思是在文件上使用CTRL + x,在其他地方使用CTRL + v。

这是通过使用命令行工具cpmv,并vi进行编辑。其他编辑器或您的桌面可能会以不同方式处理任务,并更新了更多时间戳。
塞尔达传说

例如Nautilus不会使用Ctrl + X再使用Ctrl + V来更新访问和修改,只有“更改”有所不同,例如mv
Zelda 2013年

9

影响文件的mtime的修改是文件数据的更改:写的字节数非零,或者截断最终修改了文件。创建文件还将其mtime设置为当前日期。假设未创建或截断文件,仅打开文件进行写入不会影响mtime。

从文件读取(如果读取的字节数为非零)或执行文件会将其时间设置为当前时间。仅打开文件进行读取就不会影响时间。在Linux上,现在在大多数情况下默认情况下处于禁用状态。在atime安装选项恢复更新atime而noatime安装选项禁用它们完全。

程序可以更改文件的mtime和atime。执行此操作的基本命令是touch。某些文件复制程序会将副本设置为与原始文件相同的mtime,例如cp -prsync -t

影响文件ctime的更改是文件元数据的更改:权限,所有者,时间,链接计数等。重命名文件也会更新其ctime。文件数据的更改也会影响ctime,但是从文件读取不会更改ctime,即使它更改了atime。除了将ctime设置为当前时间以外,无法以其他任何方式更改ctime(即使root受到约束,但root可以通过先更改系统时间或直接访问包含文件系统的分区来间接设置ctime)。


1

其他答案未提及的其他经验观察:

O_TRUNC即使文件最初为空,打开文件进行写入也会更改mtime。

至少在Linux 3.10的ext3上似乎是如此。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.