cp --parents에 대한 폴더 권한은 다른 파일 복사를 허용하지 않습니다.

cp --parents에 대한 폴더 권한은 다른 파일 복사를 허용하지 않습니다.

시나리오: 일반 사용자가 실행하는 스크립트를 사용하여 여러 파일을 복사하고 dir 구조를 복사하고 싶습니다. 예를 들어:

cp --parents /lib/libacl.so /tmp/my_root/
cp --parents /lib/libc.so.6 /tmp/my_root/

예상 결과: 먼저 cp/tmp/my_root/lib를 만들고 여기에 libacl.so를 넣습니다. 두 번째는 cplibc.so.6을 /tmp/my_root/lib에 넣습니다.

문제는 첫 번째 것은 cp권한을 사용하여 /tmp/my_root/lib를 생성하므로 dr-xr-xr-x.두 번째는 cp권한이 거부되어 실패한다는 것입니다.

물론 루트로 스크립트를 실행하면 모든 것이 잘 작동합니다.

한 가지 해결 방법은 먼저 디렉터리를 만든 다음 파일을 복사하여 해당 디렉터리에 적절한 권한을 부여하는 것입니다. 하지만 이를 수행하는 더 좋은 방법이 있는지 궁금합니다. 어쩌면 일부 플래그가 있을까요 cp? 그 사람을 확인했지만 아무것도 찾지 못했습니다.

답변1

해결책이 보이지 않습니다 cp. 동일한 유형의 복사를 수행하는 데 사용할 수 있으며 rsync, 쓸 수 없는 디렉토리도 생성되지만 lib새 파일을 추가할 수 있습니다. 귀하의 명령은 다음과 같습니다

rsync -LR /lib/libacl.so /tmp/my_root/
rsync -LR /lib/libc.so.6 /tmp/my_root/

-R디렉터리 구조를 유지합니다 . 심볼릭 링크를 추가했는데 -L그게 다인 것 같습니다 cp. 비록 일반적으로 우리가 원하는 것은 아니지만요. -a권한과 타임스탬프(루트인 경우 소유자/그룹)를 보존하기 위해 추가할 수 있습니다 .

rsync는 일반적으로 네트워크를 통해 파일을 복사하는 데 사용되지만 매우 일반적인 명령입니다.


rsync가 없으면 다른 명령을 사용하여 파일을 복사할 수 있지만쓰기 가능디렉토리, 예 tarcpio:

tar cf - /lib/libc.so.6 | tar -C /tmp/my_root/ -xf -

또는 chf추적 링크를 사용하십시오. CPIO의 경우:

ls /lib/libc.so.6 | cpio -pd /tmp/my_root/

링크를 따라가려면 -L을 사용하세요.

관련 정보