왜 rmdir -rf가 아닌 rm -rf입니까?


13

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

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

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


9
rmdir디렉토리를 rm제거하고 제거합니다. rmdir디렉토리가 아닌 것을 제거 하는 것이 왜 직관적 일까요?
Stéphane Chazelas

5
그렇지 않기 때문입니다. 당신은이 질문을하는 데 40 년이 늦었고, 잘못된 사람들을 묻는 것입니다.
user207421

답변:


25

초기 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최악의 경우 빈 디렉토리를 제거한다는 것을 알고 있습니다.


1
마지막 문장 다시 : 아마도 재귀 삭제 작업이에 rmdir있었다면 여전히 -r플래그 가 필요합니다 . ( rmdir -r junk대신에 rm -r junk, 그리고 rmdir junk여전히 디렉토리가 비어있는 경우에만 작동합니다)
user253751

7

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

참고 문헌 :


2

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


1
그렇다면 rm빈 디렉토리를 제거 할 수없는 이유는 무엇입니까 (재귀 모드 제외)?
user253751

전체 디렉토리를 제거 할 수없는 동일한 이유- -r디렉토리 특수 파일 기능을 사용 하려면 플래그가 필요합니다 .
다윈 폰 코 락스

1
거기에 순환 추론 ...
user253751

나는 내 추론이 편심을 가지고 있다고 말하고 싶다 >> 1 ...
Darwin von Corax
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.