"cp -a"를 사용하면 생성 시간이 유지되지 않는 이유는 무엇입니까?

"cp -a"를 사용하면 생성 시간이 유지되지 않는 이유는 무엇입니까?

생성 시간이 포함되어 있음을 이해하기 -a위해 일부 디렉토리를 복사했습니다 .preserve=all

cp -a ./* /mnt/destination/

대상의 결과 디렉터리를 확인하면 생성 시간이 현재 시간으로 설정되어 있으며,그리고 그 내용은 창작 당시를 보존하는 것 같습니다.

왜 생성 날짜가 아닌가?최상위 수준디렉토리가 유지됩니까?

소스는 HFS+이고 대상은 btrfs입니다.


대상 및 소스에 대한 디렉토리 목록 발췌:

$ ls -hal --time=creation
total 16K
drwxrwxr-x 1 andreas andreas   74 sep  2 23:25  .
drwx------ 1 andreas andreas  310 apr 26 17:08  ..
drwx------ 1 andreas andreas 2,3K sep  2 23:45  Library

$ ls -hal --time=creation /mnt/source
total 8,1M
drwxrwxr-x  1 andreas andreas   15 mar 28  2022  .
drwxr-x---+ 3 root    root    4,0K aug  9  2022  ..
drwx------  1 andreas andreas   95 apr 15  2019  Library

고쳐 쓰다

답변과 댓글을 통해 하위 디렉토리의 날짜를 확인했을 때 제가 실수를 했음이 틀림없다는 결론에 도달했습니다. 내가 해냈어. 내 잘못 – 결과에 대한 기대가 내 비전을 흐리게 했습니다. 질문의 이 부분이 제거되었습니다.

답변1

전통적인 유닉스 파일 시스템에는 생성 시간이 없고 ctime만 있습니다. 시간은변화시간이 아니라 창조 시간이다. 시간 변경은 현재 시간으로 변경되지 않는 한 운영 체제 호출을 통해 설정할 수 없습니다. 권한을 변경하거나 atime 또는 mtime을 변경하면 ctime이 현재 시간으로 설정됩니다.

생성 시간은 POSIX의 일부가 아니지만 많은 파일 시스템에서 이를 추가하는 것 같습니다.Linux 저장소 생성 시간의 파일 시스템은 무엇입니까?

하지만 이를 지원하는 파일 시스템에서도 표준화되어 있지 않기 때문에 POSIX 도구에서 생성 시간 지원이 보장되지 않으며, 이를 지원하는 파일 시스템에서도 설정이 불가능할 수 있다. 때로는 설정되고 때로는 잘못 설정되거나 일관되지 않게 설정되는 경우 다양한 지원과 관련된 여러 도구가 있거나 해당 도구가 부분적인 지원만 제공할 수 있습니다.

Linux 특정 statx함수 호출은 atime, btime, ctime 및 mtime을 지원합니다.시간생성 시간이 표시되어 있습니다. 그러나 이것은 단지 읽는 시간일 뿐입니다. (다양한 파일 시스템은 생성 시간, btime, crtime 및 otime을 포함하여 다양한 방식으로 생성 시간을 참조합니다.)

더 자세히 살펴보면 gnu coreutils cp는 utimensatPOSIX-1.2008을 준수한다고 주장하는 함수 호출을 통해 설정 시간을 기록합니다. 이 호출은 수정만 지원합니다.아르템그리고시간하지만 이것을 살펴보면 POSIX가 atime과 mtime만 지원하기 때문인지(ctime은 설정 가능하지 않음), 아니면 ctime과 btime이 기본적으로 변경 불가능하고 운영 체제에 의한 변경만 허용하고 적절하게 설정하기 때문인지 알 수 없습니다. 현재 이벤트 시간입니다.

답변2

임의의 값으로 설정할 수 있는 유일한 타임스탬프( utime(), utimes(), utimensat(), futimens()시스템 호출 사용)는 다음과 같습니다.마지막 수정일명 타임섬마지막 액세스 시간아템이라고도 합니다.

이것상태 시간 변경일명 ctime과출생/창조 시간(btime/crtime)은 지원되지 않습니다.서서히 나아가는(임의 설정) 따라서 cp -a다른 소프트웨어와 마찬가지로 생성 시간이 생성 시간과 일치하는 파일을 생성할 수 없습니다.

ln foo bar내부 실행 cp foo bar또는 -lGNU 옵션을 사용하면 동일한 타임스탬프(생성 시간 포함)가 생성 cp되지만 이 경우 및 은 동일한 파일(두 개의 다른 이름 포함)입니다.barfoofoobar

관련 정보