为什么“touch -a”也设置ctime?

为什么“touch -a”也设置ctime?

是来自 coreutils-8.4-37.el6.x86_64 的 touch(1) 还是我的大脑坏了?

$ touch abc
$ LANG=C stat abc
  File: `abc'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd04h/64772d    Inode: 10485773    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (3060399/ nodakai)   Gid: (  418/   quant)
Access: 2016-10-14 18:42:06.189751847 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:06.189751847 +0800
$ touch -a abc
$ LANG=C stat abc
  File: `abc'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd04h/64772d    Inode: 10485773    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (3060399/ nodakai)   Gid: (  418/   quant)
Access: 2016-10-14 18:42:17.374235446 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:17.374235446 +0800
$ touch --help | grep 'access time'
  -a                     change only the access time

正如您所看到的,不仅是 atime,而且 ctime 都被更新了touch -a!?!?

如果有什么区别的话,文件系统是 ext4 over LVM。

答案1

touch被指定为更改文件访问和修改时间;更改更改时间是更改文件元数据的副作用,并且touch对此没有任何控制(另请参阅futimens()utimensat())使用的函数touch

-a-m在这种情况下可以理解:默认情况下会touch更改访问时间和修改时间(并且系统会更新更改时间);使用 时-a,它仅更改访问时间,使用 时-m,它仅更改修改时间。

如果指定当前时间以外的时间,您会看到差异:访问和/或修改时间将更改为您指定的值,但更改时间将更新为当前时间。

相关内容