cp --no-preserve=mode 보존 모드를 사용하는 이유는 무엇입니까? 대체 도구를 사용할 수 있나요?

cp --no-preserve=mode 보존 모드를 사용하는 이유는 무엇입니까? 대체 도구를 사용할 수 있나요?
$ cp --no-preserve=mode --parents /sys/power/state /tmp/test/
$ cp --no-preserve=mode --parents /sys/bus/cpu/drivers_autoprobe /tmp/test/

두 줄 중 두 번째 줄이 실패합니다.

cp: cannot make directory ‘/tmp/test/sys/bus’: Permission denied

그 이유는 /tmp/test/sys쓰기 권한 없이 생성되었기 때문입니다(원본과 동일 /sys). 일반 사람은 mkdir /tmp/test/sys2이 작업을 수행하지 않습니다.

$ ls -la /tmp/test/
total 32
drwxr-xr-x  3 robert.siemer domain^users  4096 Oct 11 13:56 .
drwxrwxrwt 13 root          root         20480 Oct 11 13:56 ..
dr-xr-xr-x  3 robert.siemer domain^users  4096 Oct 11 13:56 sys
drwxr-xr-x  2 robert.siemer domain^users  4096 Oct 11 13:59 sys2

cp모드가 유지되지 않도록 어떻게 지시할 수 있습니까 ? 제외 --no-preserve=mode하고는 제 생각처럼 작동하지 않습니다...?

아니면 심볼릭 링크를 제외한 "아무것도" 유지하지 않고 파일 목록을 복사하려면 어떤 도구를 사용해야 합니까?

답변1

GNU coreutils를 사용하는 경우. 이는 버그이며 버전 8.26에서 수정되었습니다.

https://lists.gnu.org/archive/html/bug-coreutils/2016-08/msg00016.html

그래서 대체 도구는최신 coreutils또는 예를 들어 rsync권한이 보존된 경우에도 다음을 수행합니다.

$ rsync -a --relative  /sys/power/state /tmp/test
$ rsync -a --relative  /sys/bus/cpu/drivers_autoprobe /tmp/test/

이 특정 sysfs 파일에 대한 rsync와 관련된 다른 문제가 있음을 발견했지만 다음을 참조하세요. 유효성 검사를 비활성화하는 rsync 옵션이 있습니까?

또 다른 과감한 해결 방법은 chmod각 명령 다음에 모든 디렉터리를 수행하는 것 입니다 cp.

$ find /tmp/test -type d -exec chmod $(umask -S) {} \;

(위의 find/chmod 명령은 다음에도 적용되지 않습니다.어느기존 권한과 umask의 조합입니다. )

그런데이 버그를 Linux 배포판에 보고하면 유지 관리 업데이트를 통해 8.21 패키지를 수정할 수 있습니다.

답변2

이 오류에 대한 간단한 수정

#!/bin/sh

for last; do : ; done

while [ $# -gt 1 ]; do
  mkdir -p "${last}/$(dirname "$1")"
  cp --parents "$1" "$last"
  shift
done

관련 정보