왜 rmdir -rf가 아닌 rm -rf입니까? 명령이 왜인지 궁금했습니다 rm -rf. 왜

나는 디렉토리의 모든 것을 삭제하는 명령이 왜인지 궁금했습니다 rm -rf.

왜 똑같은 일을하는 플래그가 rmdir없습니까?

rmdir디렉토리 작업 에 사용하는 것이 더 직관적이지 않습니까?



답변

초기 Unix File System (1970 년경 V7 일 이전)에서 디렉토리는 특수 파일로 구현되었으며 루트 만 디렉토리 mknod(2)를 생성 한 시스템 호출을 사용할 수 있었고 루트 만 unlink(2)디렉토리 특수 파일을 사용할 수있었습니다 .

파일 시스템 구조의 일관성을 유지하기 위해 이러한 보호 기능이 적용되었습니다. 예를 들어, 사용자가 디렉토리 특수 파일에 쓰도록 허용 된 경우, 상위 디렉토리 ..가 자체 (특히 자체 i- 노드)를 가리 키도록 할 수 있습니다. 이렇게하면 파일 시스템에 순환 참조가 만들어지며 이는 나쁜 것입니다. 물론 다른 불일치가있을 수 있습니다. 이것은 분명한 예일뿐입니다.

권한이없는 사용자를 대신하여 권한있는 시스템 호출을 수행 할 수 있도록 Set-UID 루트 mkdir(1)와 같은 사용자 공간 프로그램에 의해 일관성이 유지되었습니다 rmdir(1). 재귀가에 추가되면 rm(1)remove 명령이 현재 UID로 실행 된 다음 rmdir(1)빈 디렉토리를 제거 하기 위해 단독으로 호출합니다 . 이것은 여전히 ​​표준 권한 상승의 표준 방법입니다. 필요한 것보다 많은 권한을 사용하지 마십시오.

얼마 후 mkdir(2)rmdir(2)자신의 시스템 호출하지만 사이의 관계로 추가했다 rm(1)rmdir(1)남아 있습니다.

개인적으로, 나는 그것이 더 만족스럽고 rmdir junk최악의 경우 빈 디렉토리를 제거한다는 것을 알고 있습니다.


답변

역사적이야. rm파일에 대한 참조 rmdir를 제거하기 위해 만들어졌으며 디렉토리를 병렬로 제거하기 위해 만들어졌습니다 mkdir. 수년 전에 Unix rm는을 호출하여 디렉토리 만 제거 할 수있었습니다 rmdir. rmdir(2)시스템 호출 도 없었고 rmdir라는 프로그램이 unlink(2)있었습니다.

참고 문헌 :


답변

순수한 의견이지만 디렉토리 rmrmdir제거 하는 동안 파일을 제거합니다. 디렉토리는 파일이지만 특수한 유형의 파일이므로 rm제거하는 것이 합리적 이지만 특수하게 처리해야합니다 (즉, 기능을 활성화하려면 추가 옵션이 필요합니다). 반면에 모든 파일이 디렉토리 인 것은 아닙니다. rmdir디렉토리가 아닌 것을 제거하는 IMHO는 의미 가 없습니다.