시나리오: 일반 사용자가 실행하는 스크립트를 사용하여 여러 파일을 복사하고 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를 넣습니다. 두 번째는 cp
libc.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가 없으면 다른 명령을 사용하여 파일을 복사할 수 있지만쓰기 가능디렉토리, 예 tar
및 cpio
:
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을 사용하세요.