是来自 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
,它仅更改修改时间。
如果指定当前时间以外的时间,您会看到差异:访问和/或修改时间将更改为您指定的值,但更改时间将更新为当前时间。