답변:
주된 이유는 아마도 역사적인 것입니다. 옛날에는 시스템 호출 이 없었 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 -r
alias rm='rm -i'
또한 글 rmdir
로빙 (와일드 카드) 표현식으로 빈 디렉토리를 쉽게 제거 할 수 있습니다. 예를 들어, /tmp
내용이있는 파일이나 디렉토리를 건드리지 않고 빈 디렉토리를 모두 제거하려면 다음을 수행하십시오 .
cd /tmp ; rmdir *
rmdir /tmp/*
. /tmp
디렉토리가 실제로 큰 경우 이름 당 추가 5 문자로 인해 인수에 대한 공간이 약간 더 빠를 수 있지만 cd
디렉토리 계층 구조로 이동할 필요는 없습니다 . 또한 rmdir /tmp/* 2>/dev/null
오류 메시지가 표시되지 않도록 고려할 가치가 있습니다 (일반적으로 많은 메시지가 표시되며 거의 모든 작업이 해당 작업과 관련이 없음).