tar 파일의 내용을 소유자와 그룹에 강제로 적용 하시겠습니까?


21

파일이 만들어지는 시스템에 존재하지 않는 owner : group 쌍에 속하는 내용으로 tar 파일을 만들고 싶습니다.

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

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

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

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

tar 파일이 파일을 작성하는 시스템에 존재하지 않더라도 tar가 owner : group을 허용하도록하는 방법이 있습니까?


1
--owner는 tar에서 지원하는 옵션이 아닙니다. 이것은 이식 불가능한 GNUism입니다. star를 사용하면 내장 find를 사용하고 -chown username / userid -chgrp groupname / groupid를 지정하십시오.
schily

답변:


19

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

작동하는 것 같습니다.


흥미 롭습니다! 따라서 tar 명령은 사용자 및 그룹 번호가 사용하려는 이름과 일치하도록 시스템을 폴링해야합니다. 감사!
David

1
tar 는이 플래그를 사용할 때 사용자 / 그룹 이름을 자동으로 출력 -tvf합니다. 아카이브에있는 파일 의 현재 번호 를 보려면 다음 과 같은 명령을 사용하십시오.$ tar --numeric-owner -tvf archive.tar
David

실제로 내 tar 버전으로 원하는 모든 사용자 이름을 입력하고 tar 파일에 저장 할 수 있습니다 (그러나 기본적으로 숫자 사용자 ID로). 리스팅하는 동안 기본적으로 사용자 이름을 얻지 만 --numeric-owner플래그를 사용하여 사용자 ID를 얻습니다 . 무엇보다 흥미로운 것은 둘 다 사용하여 설정할 수 있다는 것입니다 --owner=name:1234--group=groupname:4711. 출처 : 타르 소스 코드의 기능 parse_owner_group
Bluehorn

ustar (BSD 및 Linux의 표준) tar 헤더는 숫자 UID / GID 값과 사용자 및 그룹 이름을 모두 인코딩한다는 점에 주목할 가치가 있습니다. 포장을 풀 때 이름이 머리글에 있고 시스템에 정의 된 사용자 및 그룹과 일치하는 경우 이름이 먼저 사용됩니다. 숫자 UID 및 GID는 대체로 만 사용됩니다.
kbolino


-2

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

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

5
아니요. id 가 이름을 확인하는 방법을 알고 있다면 tar도 알고 있습니다. 문제는 시스템에 알려지지 않은 사용자 이름에 관한 것입니다.
Daniel S
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.