파일 수정 또는 변경으로 간주되는 것은 무엇입니까?

파일 수정 또는 변경으로 간주되는 것은 무엇입니까?

이름을 바꾸면 파일 수정이나 액세스 시간에 영향을 미치나요? 언제 상황이 바뀌었는지 목록이 있나요?

답변1

파일의 mtime에 영향을 미치는 수정 사항은 파일 데이터의 변경 사항입니다. 즉, 0이 아닌 바이트 수를 쓰거나 수정된 ​​최종 파일이 잘립니다. 파일을 생성하면 mtime도 현재 날짜로 설정됩니다. 파일이 생성되거나 잘리지 않는다고 가정하면 단순히 쓰기 위해 파일을 여는 것은 mtime에 영향을 미치지 않습니다.

파일에서 읽거나(0이 아닌 바이트 수를 읽은 경우) 파일을 실행하면 atime이 현재 시간으로 설정됩니다. 읽기 위해 파일을 여는 것만으로는 시간에 영향을 미치지 않습니다. 리눅스에서는 이것이다지금대부분의 경우 기본적으로 비활성화되어 있습니다. 마운트 atime옵션은 시간 업데이트를 복원하는 반면 noatime마운트 옵션은 업데이트를 완전히 비활성화합니다.

프로그램은 파일의 mtime 및 atime을 변경할 수 있습니다. 이를 수행하는 기본 명령은 입니다 touch. 일부 파일 복사 프로그램은 cp -p또는 rsync -t.

파일의 ctime에 영향을 미치는 변경 사항은 파일의 메타데이터(권한, 소유자, 시간, 링크 수 등)에 대한 변경 사항입니다. 파일 이름을 바꾸면 ctime도 업데이트됩니다. 파일 데이터를 변경하면 ctime에도 영향을 주지만, atime이 변경되더라도 파일에서 읽는 것은 ctime을 변경하지 않습니다. ctime을 현재 시간으로 설정하는 것 외에 다른 방법으로는 변경할 수 없습니다(루트도 제한되어 있지만 루트는 먼저 시스템 시간을 변경하거나 파일 시스템이 포함된 파티션에 직접 액세스하여 간접적으로 ctime을 설정할 수 있습니다).

답변2

이름을 바꾸면 변경 시간이 업데이트됩니다.

$ mkdir tmp
$ cd tmp

$ echo abc > a
$ stat a
  File: `a'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000 /  zelda   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:06:58.981107444 +0100
 Birth: -

$ mv a b
$ stat b
  File: `b'
  Size: 4               Blocks: 8          IO Block: 4096   regular file
Device: 26h/38d Inode: 5038682     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/  zelda)   Gid: ( 1000/   zelda)
Access: 2013-12-12 07:06:58.981107444 +0100
Modify: 2013-12-12 07:06:58.981107444 +0100
Change: 2013-12-12 07:07:14.893238472 +0100
 Birth: -

파일 내용을 읽으면 액세스 시간이 업데이트됩니다. 파일이 실제로 업데이트될 때 수정합니다(수정을 위해 열어두는 것만으로는 수정 시간을 변경할 수 없습니다).

답변3

다른 답변에서 언급되지 않은 추가 경험적 관찰:

쓰기 위해 파일을 열면 O_TRUNC파일이 처음에 비어 있더라도 mtime이 변경됩니다.

적어도 Linux 3.10의 ext3에서는 그런 것 같습니다.

관련 정보