나는 GNU를 사용하여 tar
네트워크 드라이브에 저장된 디렉토리에서 tarball을 만들려고 합니다. 이 네트워크 드라이브는 저장된 모든 콘텐츠에 대해 기본 모드 0700
( )로 설정되어 -rwx------
있으며 tarball이 생성될 때까지 변경할 수 없습니다.
다음 명령을 사용하여 tarball에 저장된 파일의 권한을 변경했습니다.
tar -c --mode=0644 -f project.tar ./project/
문제는 타르볼에 있는 모든 것에 대한 권한이 0644
( -rw-r--r--
)로 변경된다는 점입니다. 이 디렉토리에는 실행 파일 이 없으므로 ./project/
모든0644
문서그것은 중요하지 않습니다. 그러나목차결국 0644
나는 그것을 물려받았다. 다른 시스템에서 추출하는 경우 실행 비트가 추가될 때까지 디렉터리에 들어갈 수 없습니다.
tar
GNU에게 모든 모드를 변경하도록 지시하는 것이 가능합니까?문서0644
모든 모드를 변경해 보세요목차도착하다 0755
? 명령의 및 와 거의 같습니다 -type f
.-type d
find
운영 체제는 Debian 11 Bullseye 버전이고 GNU tar
버전은 1.34입니다.
답변1
그리고암소 비슷한 일종의 영양tar
, 넌 할 수있어:
tar --mode a=r,u+w,a+X -cf file.tar directory
이렇게 하면 rwxr-xr-x
디렉터리 유형 파일은 물론 rw-r--r--
다른 모든 유형의 파일(심볼릭 링크 및 디렉터리 포함)도 제공됩니다. 이는 다음과 같이 구성됩니다.
a=r
:권한 재설정r--r--r--
u+w
: serw
에 추가되었으므로u
rw-r--r--
a+X
: llx
에 추가되지만a
디렉토리 유형 파일에만 추가rwxr-xr-x
되므로 디렉토리 및rw-r--r--
기타 모든 유형의 파일에서 작동합니다.
완전한 유연성을 위해 다음을 사용할 수 있습니다.star
:
star cf file.tar -find directory \
-type d -chmod 755 \
-o -type l -chmod 777 \
-o -chmod 644
rwxr-xr-x
디렉토리 유형 파일 d
, rwxrwxrwx
기호 잉크 유형 파일 l
및 rw-r--r--
기타 유형의 파일은 어디서 얻을 수 있습니까 ?
또는 기호 형식을 사용하십시오.
star cf file.tar -find directory \
-type d -chmod a=rx,u+w \
-o -type l -chmod a=rwx \
-o -chmod a=r,u+w
답변2
친척을 사용할 수 있습니다chmod와 유사한 권한, 단지 고정된 패턴 이 아닙니다 --mode
. 조사하다수동, 맨 페이지뿐만 아니라.
use를 사용하여 a+r
모든 사람에게 읽기 권한을 부여할 수 있습니다.a+X
어디에나 존재하는 경우 실행 권한을 부여합니다.
tar -c --mode=a+rX …
그러나 파일 시스템이 모든 파일을 실행 가능하게 만들면 아카이브의 모든 파일이 실행 가능해집니다. 나는 GNU tar를 사용하여 파일을 다르게 조정할 수 있는 방법이 없다고 생각합니다. (실제로,존재하지 않습니다: +X
디렉터리를 읽을 수 있으면 디렉터리도 실행 가능하게 만들어서 a=r,u+w,a+X
작동합니다 ..)
Pax에는 권한을 조정할 수 있는 방법이 전혀 없습니다.
가장 쉬운 방법은 사용하는 것 같아요파일 시스템 바인딩다양한 메타데이터를 사용하여 파일 시스템 보기를 만듭니다. 이것은퓨즈파일 시스템이므로 시스템에 FUSE 자체가 설치되어 있는 한 관리자 권한 없이 설치하고 사용할 수 있습니다. Bindfs는 GNU tar보다 더 뛰어난 유연성을 제공합니다 --mode
. 또 다른 이점은 유사한 기능이 없는 프로그램과 함께 사용할 수 있다는 것입니다 tar --mode
. 당신은 그것을 사용할 수 있습니다--perms
옵션도착하다권한 변경:
mkdir -p views/project
bindfs --no-allow-other -p a+rD project views/project
tar -C views -cf project.tar project
fusermount -u views/project
rmdir views/project
파이썬에는tarfile
모듈은 코드 작성을 비교적 편리하게 만듭니다. 반복 아카이브를 지원하므로 전체 아카이브를 한 번에 메모리에 저장할 필요가 없다고 생각합니다. 하지만 여전히 많은 코드를 작성해야 합니다.
답변3
를 사용하지 않으면 tar
규칙에 따라 속성을 변경할 수 없는 문제를 해결할 수 있습니다 tar
.
mksquashfs
미니 언어가 있습니다행동내장되어 있으며 특정 필터링 규칙에 따라 항목을 보관하는 데 적용할 수 있습니다.여기. 간단합니다. 구문은 action@condition
이므로 다음과 같습니다.
mksquashfs ./project/ project.squashfs -no-strip -action 'chmod(0755)@type(d)' -action 'chmod(644)@type(f)'
모든 디렉토리 항목에는 0755 권한이 있고 모든 파일에는 0644
권한이 있습니다. 폴더에 fifo, 소켓, 심볼릭 링크가 있을 수 있으므로 "디렉터리" 및 "파일" 대신 "디렉터리" 및 "디렉토리가 아닌 모든 것"이 더 나은 분류일 수 있습니다. 그런 다음 무료로 일부를 추가하세요. 아마도 더 빠른 압축이 가능할 것입니다. 네트워크보다:
mksquashfs ./project/ project.squashfs \
-no-strip \
-action 'chmod(0755)@type(d)' \
-action 'chmod(644)@!type(d)' \
-comp zstd -Xcompression-level 10
이 아카이브의 목적:
unsquashfs project.squashfs
이는 (아마도 선호하는 그래픽 아카이브 관리자)를 사용하여 추출할 수 있습니다.- (Linux의 경우) 읽기 전용으로 마운트 가능(루트로)
mount -o loop gr-ieee802-11.squash /home/marcus/mnt/
- (Linux의 경우) 최신 데스크톱 환경을 사용하는 사람은 누구나 읽기 전용으로 설치할 수 있습니다. (
udisksctl loop-setup -f project.squashfs
자동으로 설치되지 않는 경우udisksctl mount -b
파일 관리자에 새로 표시된 드라이브를 클릭하세요.