저는 사용자로 일하고 있으며 압축을 풀 때(루트로) 루트 소유권으로 파일을 추출하는 tar 아카이브를 만들고 싶습니다(그렇지 않으면 루트는 각 파일을 대상으로 추출한 후 각 파일의 소유권을 수동으로 변경해야 합니다).
나는 fakeroot
이것이 정확히 그렇게 하는 것 같다는 것을 발견했습니다. 하지만 아카이브를 만드는 데 필요한 구문을 찾을 수 없습니다.
루트로 압축을 풀 때 파일이 루트 소유권을 갖도록 tar.xz 아카이브를 어떻게 생성합니까?
do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
답변1
루트로 압축을 풀 때 파일이 루트 소유권을 갖도록 tar.xz 아카이브를 어떻게 생성합니까?
이는 압축이 풀린 루트에 따라 다릅니다.
tar --no-same-owner -xf ...
모두 루트에서 시작하려면 다음을 사용할 수 있습니다.
tar --owner=root --group=root -cf ...
답변2
가근성
이것가근성유틸리티 또는 최신 유틸리티가짜 루트-ng(동일한 목적, 다른 구현 기술) 프로그램을 실행하고 프로그램이 루트로 실행 중이고 시스템 호출이 chown
성공한 것처럼 가장하십시오. 프로그램에서만 이러한 호출이 성공한 것으로 간주하며 실제로는 파일 시스템에 아무것도 반영되지 않습니다( fakeroot
추가 권한이 없기 때문에 불가능합니다). 그러나 프로그램이 파일의 소유권을 변경한 다음 해당 파일의 소유권에 따라 일부 작업을 수행하면 프로그램의 동작이 변경될 수 있습니다.
fakeroot에서 유용한 작업을 수행하는 일반적인 방법은 다음과 같은 일이 발생하는 fakeroot 환경을 실행하는 것입니다.
- 일부 파일을 생성하고 이동하고 소유권과 모드 등을 변경합니다.
- 이러한 파일의 아카이브를 만듭니다.
예:
fakeroot sh -c '
chown root:root usr/bin/foo
tar cf foo.tar usr
'
fakeroot
호출 사이에는 메모리가 없으므로 단일 호출을 사용해야 합니다 .
리눅스 네임스페이스
완전성을 기하기 위해 Linux 커널이 ≥3.8인 경우 다음을 언급하겠습니다.네임스페이스가짜 루트 환경을 만드는 또 다른 방법입니다. 사용자 레이어 지원은 아직 완료되지 않았으므로 자세히 설명하지 않겠습니다.
아카이브 마운트
문제를 해결하는 또 다른 방법은 아카이브를 디렉터리로 마운트하는 것입니다. 당신은 그것을 사용할 수 있습니다아카이브 마운트, 다음을 통해 여러 아카이브 형식을 수정할 수 있습니다.무료 아카이브, 압축된 tar를 포함합니다.
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt