![rmdir(시스템 호출)이 빈 디렉토리에서만 작동하는 이유는 무엇입니까?](https://linux55.com/image/184728/rmdir(%EC%8B%9C%EC%8A%A4%ED%85%9C%20%ED%98%B8%EC%B6%9C)%EC%9D%B4%20%EB%B9%88%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%EC%84%9C%EB%A7%8C%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
상위 inode에서 디렉토리의 링크를 자동으로 해제할 수 있는 방법이 없습니까? 여기에는 역사적 이유가 있나요?
답변1
int rmdir(const char *pathname);
는시스템 호출, POSIX.1-2001을 준수합니다. 이제 단일 디렉터리뿐만 아니라 그 안에 있는 모든 하위 디렉터리와 파일을 삭제하도록 이 시스템 호출을 원하는 상황을 상상해 보세요.
- 이 논리를 커널에 추가해야 하는데 이는 쉬운 작업이 아니며 그렇게 하면 커널이 부풀어오르게 됩니다.
- 실행 시간 측면에서 작업이 정의되지 않습니다.
- 커널에서는 그다지 의미가 없는 처리가 실패할 수 있는 방법이 많이 있습니다.
답변2
이것은 버그가 아닌 기능입니다!
rmdir *
를 사용하여 비어 있지 않은 디렉토리를 유지하면서 빈 디렉토리를 쉽게 삭제할 수 있습니다 . 이것은 제가 자주 사용하는 시스템 관리 방법입니다.
rm -rf
전체 디렉터리 트리(모든 파일 및 하위 디렉터리)가 삭제 됩니다 .