소유자와 그룹이 tar 파일의 내용을 가져오도록 강제하시겠습니까?

소유자와 그룹이 tar 파일의 내용을 가져오도록 강제하시겠습니까?

파일이 생성된 시스템에 존재하지 않는 소유자:그룹 쌍에 콘텐츠가 속하는 tar 파일을 생성하고 싶습니다.

제가 시도한 방향은 다음과 같습니다.

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata

이 명령을 실행할 때 다음 오류가 발생합니다.

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now

파일이 생성된 시스템에 소유자:그룹이 없더라도 tar가 소유자:그룹을 강제로 수락하도록 하는 방법이 있습니까?

답변1

Linux는 내부 소유자 및 그룹 이름을 사용하지 않고 숫자(UID 및 GID)를 사용합니다. 사용자 편의를 위해 사용자 및 그룹 이름은 /etc/passwd 및 /etc/group 파일의 내용에서 매핑됩니다. 이러한 파일에는 "otherowner" 항목이 없기 때문에 Linux는 실제로 파일에 어떤 UID와 GID를 할당해야 하는지 알지 못합니다. 숫자를 전달해 봅시다:

$ tar cf archive.tar test.c --owner=0 --group=0
$ tar -tvf archive.tar 
-rw-rw-r-- root/root        45 2013-01-10 15:06 test.c
$ tar cf archive.tar test.c --owner=543543 --group=543543
$ tar -tvf archive.tar 
-rw-rw-r-- 543543/543543    45 2013-01-10 15:06 test.c

작동하는 것 같습니다.

답변2

.take를 --no-same-owner --no-same-permissions사용하여 매개변수 추가tar문서 보기.

답변3

tar 아카이브는 사용자 및 그룹 이름과 숫자 ID를 저장할 수 있습니다(이것이 가능한 모든 tar 형식 버전에 적용되는지는 확실하지 않지만).

GNU tar는 두 가지 옵션을 허용 --user=USER하고 --group=GROUP파일에 대한 사용자와 그룹을 설정합니다.

USERGROUP이름, 숫자 ID 또는 둘 다( 형식)로 지정할 수 있습니다 NAME:ID.

이름과 ID를 명시적으로 지정하지 않는 한, 누락된 부분은 로컬 시스템의 사용자/그룹을 찾아 채워집니다. 시스템에 지정된 사용자가 없으므로 otherownertar는 파일에 할당할 UID를 알 수 없습니다.

옵션을 지정하면 --owner=otherowner:1000 --group=othergroup:1000효과가 있습니다.

답변4

다음은 사용자/그룹을 ID로 동적으로 바꾸는 코드입니다.

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata

관련 정보