rm -rf로 디렉토리 트리를 제거 할 수 없습니다


9

이것은 나에게 매우 이상해 보인다. 커널 2.6.37.2를 실행 중이며 다음을 실행했습니다.

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

예상대로 복사 할 때 일부 권한 거부가 발생하고 결국 Control-C를 누르십시오. Permission denied새 디렉토리와 파일을 제거하려고 할 때 많은 파일을 얻 습니다.

참고로, 친구 .tgz가 자신의 /procdir 에 대한 스냅 샷을 보냈기 때문에이 이상한 행동을 발견했습니다 . 나는 디렉토리를 추출하고 그것을 통해보고 완료했을 때 나는 같은 문제가 있었다.

rm -rf 루트가 작동합니다.

lsattr e 속성 (모든 파일 / 디렉토리가 표시하는 속성)을 표시합니다.


핵심 문제가에 관한 것이 아니기 때문에 질문 제목을 약간 일반화했습니다 /proc. 그건 그렇고, 이번에는 조금 늦었지만 질문을 게시 한 후 답변을 찾으면 스스로 대답 하고 비슷한 문제가 발생할 수있는 다른 사람들을 위해 남겨 두는 것이 좋습니다.
Gilles 'SO- 악의를 그만두십시오

답변:


16

쓰기 권한이없는 비어 있지 않은 디렉토리가 있으면 해당 내용을 제거 할 수 없습니다.

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

그 이유는 rm다른 명령과 같은 권한에 구속되어 있으며 제거 bar권한에는에 대한 쓰기 권한이 필요 하기 때문 입니다 foo. rmroot는 항상 파일을 제거 할 수있는 권한이 있으므로 root로 실행할 때는 적용되지 않습니다 .

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

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

여전히 같은 결과 "작업이 허용되지 않습니다"
Legionar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.