mtime 및 ctime과 같을 때 atime이 업데이트되는 이유는 무엇입니까?

mtime 및 ctime과 같을 때 atime이 업데이트되는 이유는 무엇입니까?

Linux의 기본 "상대시간" 마운트 옵션이 inode 액세스 시간을 처리하는 방법을 이해하려고 노력하고 있지만 문서화된 동작은설치(8)내가 본 것과 완전히 일치하지 않습니다. 그것은 말한다:

관계 시간

수정 또는 변경 시간을 기준으로 inode 액세스 시간을 업데이트합니다. 이전 액세스 시간이 현재 수정 또는 변경 시간보다 이전인 경우에만 액세스 시간이 업데이트됩니다. (noatime과 유사하지만 마지막 수정 이후 파일을 읽었는지 여부를 알아야 하는 mutt 또는 기타 응용 프로그램을 손상시키지 않습니다.)

테스트 파일에 대해 동일한 atime/mtime/ctime 설정을 사용할 수 있습니다.

$ touch sometestfile
$ stat sometestfile 
  File: sometestfile
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 259,2   Inode: 38318274    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   user)   Gid: ( 1000/   user)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2023-03-24 16:56:56.758033579 -0400
Modify: 2023-03-24 16:56:56.758033579 -0400
Change: 2023-03-24 16:56:56.758033579 -0400
 Birth: 2023-03-24 16:56:56.758033579 -0400

그러나 후속 읽기에서는 atime이 증가하더라도 atime이 증가합니다.아니요현재 수정 또는 변경 시간보다 이전:

$ cat sometestfile
$ stat sometestfile
  File: sometestfile
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 259,2   Inode: 38318274    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   user)   Gid: ( 1000/   user)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2023-03-24 16:57:02.336950126 -0400
Modify: 2023-03-24 16:56:56.758033579 -0400
Change: 2023-03-24 16:56:56.758033579 -0400
 Birth: 2023-03-24 16:56:56.758033579 -0400

매뉴얼 페이지를 보면 그대로 유지되어야 하는 것 아닌가요? 이것은 맨 페이지의 "<"와 커널 소스의 "<="의 경우입니까? (이것은 기본적으로 반대입니다.이 문제; 후속 읽기에서는 변경되지 않는다는 것이 이해가 되지만, 첫 번째 읽기에서는 변경되는 이유가 무엇인지 혼란스럽습니다. ) 나는 이것이 매우 까다롭다는 것을 알고 있지만 파일 액세스 시간과 관련된 모든 극단적인 경우에 대해 머리를 감싸려고 노력하고 있었는데 방금 이 문제를 발견했습니다. 커널 6.1.9가 있는 Fedora 37과 커널 6.2.6이 있는 Arch에서 이것을 본 적이 있습니다.

답변1

예, "이른"은 "늦지 않은"을 의미해야 합니다.

당신이 보는 행동은 정확합니다. 파일을 터치한다는 것은 쓰기를 의미합니다. atime첫 번째 후속 읽기에서 업데이트되었습니다.

매뉴얼에 버그가 있는 것 같습니다.

관련 정보