Files

為什麼“touch -a”還要設置ctime?

  • October 14, 2016

是 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。

touch被指定為改變文件訪問和修改時間;更改更改時間是更改文件元數據的副作用,並且touch無法對此進行任何控制(另請參閱futimens()utimensat()使用的函式touch)。

-a-m在此上下文中理解:預設情況下touch會更改訪問和修改時間(並且系統會更新更改時間);用-a,它只改變訪問時間,用-m,它只改變修改時間。

如果您指定的時間不是目前時間,您可以看到差異:訪問和/或修改時間將更改為您指定的值,但更改時間將更新為目前時間。

引用自:https://unix.stackexchange.com/questions/316386