rm -rf를 사용하여 디렉토리 트리를 삭제할 수 없습니다.

rm -rf를 사용하여 디렉토리 트리를 삭제할 수 없습니다.

나에게는 이것이 이상해 보인다. 나는 커널 2.6.37.2를 실행 중이고 다음을 실행했습니다.

~]$ cp -r /proc/ here
~]$ rm -rf here

복사가 예상대로 작동하는 동안 일부 권한 거부가 발생하여 결국 Ctrl-C를 누르게 되었습니다. Permission denied새 디렉터리와 파일을 삭제하려고 하면 많은 파일이 생성됩니다 .

참고로, 친구가 .tgz자신의 디렉토리 스냅샷을 나에게 보냈기 때문에 이 이상한 동작을 발견했습니다 /proc. 디렉토리를 추출하고 보기를 마쳤을 때 동일한 문제가 발생했습니다.

rm -rf루트가 작동하기 때문입니다.

lsattre 속성을 표시합니다(이것은 내 모든 파일/디렉토리에 대해 표시되는 속성입니다).

답변1

쓰기 권한이 없는 비어 있지 않은 디렉토리가 존재하는 경우 해당 내용을 삭제할 수 없습니다.

$ mkdir foo
$ touch foo/bar
$ chmod a-w foo
$ rm -rf foo
rm: cannot remove `foo/bar': Permission denied

그 이유는 rm다른 명령과 마찬가지로 권한이 적용되며, 삭제 권한에는 bar쓰기 권한이 필요하기 때문입니다 foo. rm루트는 항상 파일을 삭제할 수 있는 권한을 갖고 있으므로 루트로 실행 중인 경우에는 적용되지 않습니다 .

디렉토리 트리를 삭제 가능하게 만들려면 그 안에 있는 모든 디렉토리를 쓰기 가능하게 만드십시오(delete를 사용할 때 일반 파일에 대한 권한은 중요하지 않습니다 rm -f). 다음 명령 중 하나를 사용할 수 있습니다.

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +

관련 정보