답변:
주된 이유는 아마도 역사적인 것입니다. 옛날에는 시스템 호출 이 없었 rmdir(2)으며 mkdir(2)(여기에서는 7 판 UNIX ™에 대해 설명하고 있음), 시스템 호출을 rmdir(1)사용하여 unlink(2)디렉토리를 제거 하는 SUID 루트 프로그램이 필요했습니다 .
7 판 UNIX 설명서는 http://cm.bell-labs.com/7thEdMan 에서 온라인으로 볼 수 있습니다 (최종 확인 2017-04-23). 또한 http://plan9.bell-labs.com/7thEdMan (최종 확인 2017-04-23) 에서도 제공됩니다 . 볼륨 1의 명령 및 시스템 호출을위한 FreeBSD 사이트 링크가있는 볼륨 2의 기사에 대해서는 온라인 ( http://wolfram.schneider.org/bsd/7thEdManVol2/)에 온라인으로 하나 이상의 대체 소스가있는 것 같습니다. .
rm명령 (일반 비 SUID 프로그램) 호출 된 rmdir(1)빈 디렉토리를 제거 명령을 사용합니다. 그것은 스스로 할 수 없었습니다. 루트 권한이 필요했습니다. 따라서이 rmdir(1)명령 ( 여기서는 Unix V7의 소스 코드는 여기 참조 )이 비어있는 디렉토리를 제거 rm하고 빈 디렉토리 자체는 제거하지 않았습니다.
rm디렉토리를 제거 하는 데 사용하려면 -r옵션 을 제공해야합니다 .
대칭 인수도 있습니다. mkdir(1)디렉토리를 작성 하려면 명령이 필요합니다 . 수행 한 작업 rmdir(1)을 취소 하라는 명령 을받는 것이 합리적 mkdir(1)입니다. 게다가 그들은 요즘의 간단한 시스템 호출 rmdir(2)과 mkdir(2)시스템 호출입니다. 예, UNIX 7th Edition으로 돌아가서 디렉토리 노드를 생성하는 호출 과 디렉토리에 항목 을 생성하는 호출을 mkdir(1)사용하는 SUID 루트 프로그램이었습니다. .mknod(2)link(2)...
fsck(1)살아남은 것입니다.
"rm"은 디렉토리에서 작동하지 않습니다. 재귀 삭제를 위해서는 rmdir을 사용하거나 -r 스위치를 지정해야합니다. 그 이유는 역사입니다 : unlink와 rmdir별도의 시스템 호출이며, 유닉스의 초기부터 있었다.
rmdir(2)하거나 mkdir(2)존재 하지 않았다 . 사용자 root는 mknod(2)호출을 사용하여 디렉토리 노드를 작성 하고 호출을 사용하여 디렉토리 link(2)에 .및 ..항목 을 작성할 수 있습니다 . 및 root사용을 할 수 unlink(2)있는 디렉토리 항목을 제거하기 위해 전화를.
또한 rmdir은 빈 디렉토리 만 제거합니다 . 디렉토리에서 추가 파일을 삭제하지 않으려면 (//.bashrc 또는 사용중인 모든 파일에서 항상 삭제 대상을 확인 해야하는 rm을 별칭으로 지정한 경우를 제외하고 rmdir)보다 안전 합니다. ).rm -ralias rm='rm -i'
또한 글 rmdir로빙 (와일드 카드) 표현식으로 빈 디렉토리를 쉽게 제거 할 수 있습니다. 예를 들어, /tmp내용이있는 파일이나 디렉토리를 건드리지 않고 빈 디렉토리를 모두 제거하려면 다음을 수행하십시오 .
cd /tmp ; rmdir *
rmdir /tmp/*. /tmp디렉토리가 실제로 큰 경우 이름 당 추가 5 문자로 인해 인수에 대한 공간이 약간 더 빠를 수 있지만 cd디렉토리 계층 구조로 이동할 필요는 없습니다 . 또한 rmdir /tmp/* 2>/dev/null오류 메시지가 표시되지 않도록 고려할 가치가 있습니다 (일반적으로 많은 메시지가 표시되며 거의 모든 작업이 해당 작업과 관련이 없음).