tar 명령으로 생성된 디렉터리에는 777 권한이 없습니다.

tar 명령으로 생성된 디렉터리에는 777 권한이 없습니다.

tar 파일을 추출할 때 오류가 발생했습니다. 생성된 디렉터리는 777 대신 chmod 666을 사용하여 생성되었습니다. 따라서 해당 폴더 내에서는 추출되지 않습니다.

이것은 내 명령입니다:

$umask 000 && tar -xvzf compress.tgz
tar: dist/assets: Cannot mkdir: Permission denied
tar: dist/assets/favicon.ico: Cannot open: Permission denied

$ls -ll
drw-rw-rw- 2 user grp    4096 Mar 14 16:43 assets

저는 이 모듈을 로컬에서 사용하여 파일을 압축합니다.

https://www.npmjs.com/package/tar

mkdir을 사용하여 디렉토리를 생성하면 777 모드가 제공됩니다. 무엇이 빠졌습니까?

요청대로:

-bash-4.2$ tar tzvf compress.tgz
drw-rw-rw- 0/0               0 2018-03-15 12:17 dist/
-rw-rw-rw- 0/0           13117 2018-03-15 12:17 dist/3rdpartylicenses.txt
drw-rw-rw- 0/0               0 2018-03-15 12:17 dist/assets/

추출 해서 사용하고 있습니다 --strip 1.

답변1

출력에서 볼 수 있듯이 tar tv아카이브 자체에 대한 권한이 손상되었습니다. 이 아카이브를 생성한 도구를 제어할 수 있는 경우 이를 수정하거나 버그를 보고하는 것이 좋습니다.

손상된 아카이브에서 파일을 추출해야 한다고 가정합니다. 이 시도:

tar xzvf compress.tgz --delay-directory-restore
find dist -type d -exec chmod a+x {} \;

+(이 경우에는 후행을 사용할 수 없습니다. 고정된 하위 디렉토리로 드롭다운할 수 chmod있도록 한 번에 하나의 디렉토리에 적용해야 하기 때문 find입니다. 세미콜론 앞에는 백슬래시가 붙어서 쉘이 후행을 다음과 같이 처리하지 않도록 합니다. 특수 문자이지만 대신 find... -exec리터럴로 )에 전달됩니다.

답변2

star(from )을 사용하면 schily-tools다음을 사용하여 추출할 수 있습니다.

star xf file.tgz -no-p -find -type d -chmod a+x

압축을 푼 디렉터리에 실행 권한(모든 사람에 대한)을 추가하여 아카이브의 가짜 권한을 수정하세요.

이는 루트로 실행하는 경우 -no-p에도 적용되며, 너무 넓은 쓰기 권한도 수정하는 002 이상이라고 가정합니다(참고: 보다 우선함 ).umaskumaskumask-chmod

tar내 테스트에서는 GNU bsdtar나 . 아마도 존재하는 경우 이를 추출하려고 시도하고 있을 것입니다.startar이미검색 권한이 없는 디렉터리 dist(예를 들어 비슷한 권한이 손상된 유사한 아카이브를 추출했기 때문)

아카이브를 추출하기 전에 이러한 권한을 수정해야 합니다.

관련 정보