rmdir이 재귀적으로 작동하지 않는 이유는 무엇입니까?

rmdir이 재귀적으로 작동하지 않는 이유는 무엇입니까?

rmdir빈 디렉터리만 삭제하세요. rm -rf재귀 삭제를 사용합니다.

  • rmdir왜 재귀 옵션이 없나요 ? 논리적으로 삭제하면목차, 을 사용하고 싶습니다 rmdir.
  • rm가장 간단한 경우를 제외한 모든 경우에 디렉토리를 삭제하는 데 사용된다는 점을 고려하면 이 기능이 rmdir존재하는 이유는 무엇입니까? 이 기능은 에 포함되어 있습니다 rm.

이것은 단지 역사의 우연일까요?

답변1

디렉터리 연결 해제는 원래 권한이 있는 작업입니다.:

디렉터리 연결을 해제하는 것도 불법입니다(수퍼유저 제외).

그래서 rmdir구현한건데디렉토리를 삭제하는 작은 바이너리로, 그 당시에는 디렉토리 내부의 ..합계를 삭제한 .다음 디렉토리 자체를 삭제하는 작업이 포함되었습니다. rmdirsetuid 루트로 설계되었으며 다음을 사용하여 별도의 권한 테스트를 수행합니다.access실제 사용자가 디렉터리를 삭제할 수 있는지 여부를 결정합니다. 다른 setuid 루트 바이너리와 마찬가지로 단순하고 집중적으로 유지하는 것이 가장 좋습니다.

rm -r실제로이 별도의 바이너리를 사용하세요필요에 따라 디렉터리를 삭제합니다.

rm -r와 사이의 지속적인 차이는 rmdir이러한 초기 차이의 결과인 것으로 보입니다 .

아마도 rm재귀 삭제 기능은 매우 초기에 획득되었고 rmdir작은 소관을 가져야 했기 때문에 rmdir재귀 삭제 기능을 제공하는 것 자체로는 결코 유용하다고 간주되지 않았습니다.

답변2

재귀적 rmdir(편리함)에 대한 대안은 다음과 같습니다:

find . -depth -type d -exec rmdir {} \;

이렇게 하면 빈 디렉터리만 삭제되며, 그 중 일부가 비어 있지 않으면 무해한 오류가 많이 발생합니다.

재귀적 rmdir은 계단식 오류를 계속하는 것보다 오류가 발생할 때 하위 트리를 중단하는 것이 더 똑똑할 수 있지만 아마도 더 빠르지는 않습니다.

지적했듯이 rmdir에는 이 -p옵션이 있지만 정확하게 재귀적이지는 않습니다. 위에서 설명한 대로 find를 사용하는 기능은 이점이 최소화되므로 재귀 옵션을 추가하려는 인센티브를 제거할 수 있습니다.

관련 정보