나는 디렉토리의 모든 것을 삭제하는 명령이 왜 rm -rf
.
같은 일을 하는 플래그가 왜 없나요 rmdir
?
rmdir
디렉토리 작업에 사용하는 것이 더 직관적이지 않을까요?
답변1
초기 Unix 파일 시스템(적어도 1970년경 V7 시대)에서는 디렉토리가 특수 파일로 구현되었으며 루트만 mknod(2)
이를 생성한 시스템 호출을 사용할 수 있었고 루트만 unlink(2)
디렉토리 특수 파일을 만들 수 있었습니다.
이러한 보호 조치는 파일 시스템 구조의 일관성을 유지하기 위해 수행됩니다. 예를 들어, 사용자가 디렉토리 특수 파일을 작성할 수 있는 경우, 사용자는 ..
자신의 상위 디렉토리가 자신(특히 자신의 i-노드)을 가리키도록 할 수 있습니다. 이렇게 하면 파일 시스템에 순환 참조가 생성되어 나쁜 일이 됩니다. 물론, 다른 불일치가 발생할 수도 있습니다. 이는 단지 하나의 명백한 예일 뿐입니다.
일관성은 권한이 없는 사용자를 대신하여 권한 있는 시스템 호출을 할 수 있도록 Set-UID 루트 mkdir(1)
및 Set-UID 와 같은 사용자 공간 프로그램에 의해 유지됩니다 . rmdir(1)
재귀적으로 추가되면 rm(1)
제거 명령은 현재 UID로 실행된 다음 rmdir(1)
빈 디렉터리를 제거하기 위해서만 호출됩니다. 이는 권한 상승에 대한 상당히 표준적인 접근 방식입니다. 필요한 것보다 더 많은 권한을 사용하지 마십시오.
얼마 후 mkdir(2)
과 자체 시스템 호출이 추가되었지만 rmdir(2)
과 간의 관계는 여전히 존재합니다.rm(1)
rmdir(1)
개인적으로 저는 이것이 더 만족스럽다고 생각하며 rmdir junk
제가 할 수 있는 최악의 일은 빈 디렉토리를 삭제하는 것임을 알고 있습니다.
답변2
이것은 역사적입니다. rm
파일에 대한 참조를 삭제하는 것이고, rmdir
디렉토리를 삭제하는 것입니다 mkdir
. 몇 년 전에는 Unix를 호출 해야만 시스템 호출이 rm
가능 rmdir
했습니다 .rmdir(2)
rmdir
unlink(2)
인용하다:
답변3
순전히 의견의 문제이지만 디렉토리를 삭제하면 rm
파일도 삭제됩니다 rmdir
. 디렉토리는 파일이지만 특별한 유형의 파일이므로 rm
삭제하는 것이 합리적이지만 특별하게 취급하는 것이 좋습니다(예: 기능을 활성화하려면 추가 옵션이 필요함). 반면에 모든 파일이 디렉토리, IMHO, rmdir
거기 디렉토리가 아닌 것을 삭제하는 것은 의미가 없습니다.