"cpio"와 함께 "find -length"를 사용하는 이유

"cpio"와 함께 "find -length"를 사용하는 이유

info cpio페이지 에서 :

전체 디렉토리 트리를 보관하려는 경우 find 명령은 cpio에 파일 목록을 제공할 수 있습니다.

 % find . -print -depth | cpio -ov > tree.cpio

-깊이 옵션은 Find가 디렉토리 자체를 인쇄하기 전에 디렉토리의 항목을 인쇄하도록 강제합니다. 이는 디렉터리 이름 자체 앞에 디렉터리 항목을 인쇄하여 제한적인 디렉터리 권한의 영향을 제한합니다.

마지막 부분은 무엇을 의미하나요? 디렉터리 이름 자체 앞에 디렉터리 항목을 인쇄하여 제한적인 디렉터리 권한의 영향을 제한하는 방법은 무엇입니까?

답변1

대부분의 cpio구현은 어리석고 아카이브 압축을 풀 때 디렉토리 권한을 관리하지 않습니다.

디렉토리에 쓰기 액세스 권한이 없고 cpio 아카이브가 일반적인 순서로 되어 있는 경우 find디렉토리는 cpio아카이브의 첫 번째 위치 에 있으며 cpio먼저 아카이브에서 추출됩니다. 이러한 "읽기 전용" 디렉터리의 압축을 풀고 권한이 부여되면 디렉터리 내용이 나중에 아카이브에 표시되어 압축이 풀릴 때 해당 디렉터리에 파일을 넣을 수 있는 권한이 없습니다.

  • cpio문제에 대한 한 가지 해결책은 디렉터리의 내용을 먼저 포함하고 관련 디렉터리를 내용 뒤에 포함하는 아카이브를 만드는 것입니다. 이로 인해 cpio누락된 디렉토리가 기본 권한으로 생성되고( -d누락된 디렉토리 생성이 호출된 경우) 그 안의 파일이 아카이브에서 추출된 다음 디렉토리가 아카이브에 표시되면 권한이 " 읽기 전용"입니다.

  • cpio또 다른 해결책은 읽기 전용 디렉터리에서도 파일을 생성할 수 있으므로 root어리석은 구현을 사용하여 아카이브를 추출하는 것입니다 .root

  • 세 번째 해결책은 사내 에뮬레이션 cpio과 같은 최신 구현을 사용하는 것입니다 . 아카이브의 디렉터리 권한을 기억하되 먼저 중간 쓰기 권한이 있는 디렉터리를 생성하십시오. 중간 쓰기 권한이 있는 디렉터리에 아카이브의 파일을 추출한 후 기억된 실제 디렉터리 권한 설정이 지연되었습니다.cpiostarstarstar

답변2

OSX(및 BSD) 버전의 매뉴얼 페이지에는 find다음과 같은 내용이 나와 있습니다.

 -d      Cause find to perform a depth-first traversal, i.e., directories 
         are visited in post-order and all entries in a directory will 
         be acted on before the directory itself.  By default, find visits 
         directories in pre-order, i.e., before their contents.  Note, 
         the default is not a breadth-first traversal.

         This option is equivalent to the -depth primary of IEEE Std 
         1003.1-2001 (``POSIX.1'').  The -d option can be useful when find 
         is used with cpio(1) to process files that are contained in 
         directories with unusual permissions.  It ensures that you have 
         write permission while you are placing files in a directory, 
         then sets the directory's permissions as the last thing.

마지막 문장에서 그 이유를 설명하고 있습니다. ? ?

스위치의 목적은 "리프 노드"에 도달할 때까지 찾은 모든 디렉터리를 -depth강제로 find드릴다운한 다음 인쇄하는 것입니다.

노트:하위 -depth디렉터리가 상위 디렉터리보다 먼저 처리되도록 합니다.

이 스위치를 사용하면 전체 읽기/실행 권한을 허용하지 않는 사용자 ID로 인해 지나치게 제한적일 수 있고 하위 수준 디렉터리 생성을 허용하지 않는 명령에 상위 디렉터리를 전달할 때 문제가 발생하지 않도록 -depth보장할 수 있습니다 .findcpio

  • -깊이옵션(실제로 항상 참인 기준)은 출력을 다음과 같이 강제합니다.깊이 우선- 즉, 먼저 파일이 있고 그 다음에는 해당 파일이 포함된 디렉터리가 있습니다. 이는 디렉터리에 제한적인 권한이 있을 때 도움이 되며, 처음에 디렉터리를 복원하면 파일 복구가 방지될 수 있습니다(어떠한 경우든 디렉터리의 타임스탬프 변경). 일반적으로 find는 디렉터리를 먼저 반환한 다음 해당 디렉터리의 모든 파일을 반환합니다.

인용하다

관련 정보