나는 디렉토리의 모든 것을 삭제하는 명령이 왜인지 궁금했습니다 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)
있었습니다.
참고 문헌 :
답변
순수한 의견이지만 디렉토리 rm
를 rmdir
제거 하는 동안 파일을 제거합니다. 디렉토리는 파일이지만 특수한 유형의 파일이므로 rm
제거하는 것이 합리적 이지만 특수하게 처리해야합니다 (즉, 기능을 활성화하려면 추가 옵션이 필요합니다). 반면에 모든 파일이 디렉토리 인 것은 아닙니다. rmdir
디렉토리가 아닌 것을 제거하는 IMHO는 의미 가 없습니다.