다음 시나리오를 고려해보세요.
rwx
디렉터리 그룹 ID의 구성원으로 디렉터리에 액세스 할 수 있습니다 .- 시스템 관리자가 사용자의 실행을 허용하지 않습니다
chown
(참조:이 스레드세부)
디렉토리의 재귀 소유권을 얻는 방법은 무엇입니까?
나는 내가 갖고 싶다고 가정하면 다음을 할 수 있다고 믿습니다.A
cp -R A B
rm -R A
mv B A
A
그러나 이는 지루한 작업이며 크기가 클 경우 많은 공간이 필요할 수 있습니다.
답변1
다음과 같이 소유권을 얻을 수 있습니다.
$ mv A A.old
$ mkdir A
$ mv A.old/* A.old/.[!.]* A.old/..?* A/
$ rmdir A.old
답변2
실제로는 디렉토리의 소유권만 가져오면 됩니다. 일반 파일은 다음에 수정할 때 자동으로 처리되며 심볼릭 링크와 파이프는 중요하지 않으며 장치나 다른 이국적인 유형이 없다고 가정하겠습니다.
디렉토리의 재귀적 복사본을 만들 수 있지만 일반 파일을 복사하는 대신 하드 링크를 만듭니다. GNU coreutils 사용(Linux, Cygwin):
cp -al A B
모든 일반 파일은 A/dir/file
에 하드 링크되어 있습니다 B/dir/file
. 그런 다음 소스 트리를 삭제할 수 있습니다.
GNU coreutils가 없으면 대신 rsync를 사용할 수 있습니다.
cd A
rsync -a --link-dest=$PWD . ../B
A를 삭제해도 실제로 파일이 삭제되지 않도록 하려면 모든 일반 파일의 하드 링크 수가 2 이상인지 확인하세요. 다음 명령은 아무 것도 출력하지 않아야 합니다.
find A -type f -links 1
답변3
복사를 포함하지 않는 모든 방법에는 no-chown 규칙이 발생합니다. 루트에게 이 작업을 요청하세요.
야심 찬 경우 자체 보안 검사를 수행하고 보다 완화된 규칙에 따라 chown을 허용할지 여부를 결정하는 setuid-root 설치용으로 설계된 새로운 chown 유사 유틸리티를 작성할 수 있습니다.
주로 디스크 공간에 관한 것이라면 cp를 rm과 인터리브하는 도구만 있으면 됩니다.