"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! ? ! ?

차이점이 있다면 파일 시스템은 LVM을 통한 ext4입니다.

답변1

touch파일 액세스 및 수정 시간을 변경하도록 지정되었습니다. 수정 시간을 변경하는 것은 파일 메타데이터 변경의 부작용이며 touch이를 제어할 수 없습니다.futimens()그리고utimensat()) 기능이 사용되었습니다 touch.

-a-m이 경우 이해할 수 있습니다. 기본적으로 touch액세스 시간과 수정 시간이 변경됩니다(시스템은 변경 시간을 업데이트합니다). 사용하면 -a액세스 시간만 변경되고, 사용되면 -m수정 시간만 변경됩니다.

현재 시간이 아닌 다른 시간을 지정하면 차이가 나타납니다. 접속 및/또는 수정 시간은 지정한 값으로 변경되지만 변경 시간은 현재 시간으로 업데이트됩니다.

관련 정보