하드 링크된 tail 파일을 삭제하면 헤더의 변경 시간이 변경되며 그 반대의 경우도 마찬가지입니다. 왜?

하드 링크된 tail 파일을 삭제하면 헤더의 변경 시간이 변경되며 그 반대의 경우도 마찬가지입니다. 왜?

참고: 질문에는 반대라고 나와 있지만 둘 다 동일한 inode를 가리키고 어느 것이 머리이고 어느 것이 꼬리인지 구분할 수 없기 때문에 실제로는 의미가 없습니다.

hlh.txt 파일이 있다고 가정해 보겠습니다.

[root@FREL ~]# fallocate -l 100 hlh.txt

이제 hlh.txt의 변경 시간을 보면

[root@FREL ~]# stat hlh.txt
  File: hlh.txt
  Size: 100             Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 994         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:43:05.469703330 -0500
 Birth: 2023-01-11 01:43:05.469703330 -0500

하드 링크 생성

[root@FREL ~]# ln hlh.txt hlt.txt

hlh.txt와 hlt.txt는 모두 동일한 inode를 가리키므로 변경 시간은 하드 링크된 tail 파일의 이해할 수 있는 ctime이 됩니다.

[root@FREL ~]# stat hlt.txt
  File: hlt.txt
  Size: 100             Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 994         Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:44:05.316842644 -0500
 Birth: 2023-01-11 01:43:05.469703330 -0500

하지만 헤더 파일의 링크를 해제하면 파일의 ctime도 변경됩니다. 왜? 우리가 하는 일은 헤더를 제거하는 것입니다.여기서 시간을 바꾸면 무슨 소용이 있나요? 왜 변화가 필요합니까?

[root@FREL ~]# unlink hlh.txt
[root@FREL ~]#
[root@FREL ~]# stat hlt.txt
  File: hlt.txt
  Size: 100             Blocks: 8          IO Block: 4096   regular file
Device: fc00h/64512d    Inode: 994         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:47:49.588364704 -0500
 Birth: 2023-01-11 01:43:05.469703330 -0500

답변1

이것은 요구 사항입니다라이브러리 unlink()기능POSIX를 통해:

성공적으로 완료되면 unlink()업데이트 상위 디렉터리의 마지막 데이터 수정 및 마지막 파일 상태 변경 타임스탬프가 표시되어야 합니다.또한 파일의 링크 수가 0이 아닌 경우 파일의 마지막 파일 상태 변경 타임스탬프가 업데이트된 것으로 표시되어야 합니다.

표준 문서는 이 요구 사항을 확장하지 않습니다. 링크 수가 1개 감소했기 때문에 파일 상태가 변경되었다는 사실을 반영하도록 ctime 타임스탬프("마지막 파일 상태 변경 타임스탬프")가 업데이트되었다고 가정합니다.

관련 정보