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 이상이라고 가정합니다(참고: 보다 우선함 ).umask
umask
umask
-chmod
tar
내 테스트에서는 GNU bsdtar
나 . 아마도 존재하는 경우 이를 추출하려고 시도하고 있을 것입니다.star
tar
이미검색 권한이 없는 디렉터리 dist
(예를 들어 비슷한 권한이 손상된 유사한 아카이브를 추출했기 때문)
아카이브를 추출하기 전에 이러한 권한을 수정해야 합니다.