rmdir(1)과 rm(1)이 공존하는 이유는 무엇입니까?

rmdir(1)과 rm(1)이 공존하는 이유는 무엇입니까?

나는 매일 BSD와 Linux를 사용하는데, rm(1) 대신 rmdir(1)을 사용해야 하는 상황은 한번도 겪어보지 못했습니다. rmdir의 존재 목적은 무엇입니까?

답변1

주된 이유는 아마도 역사적일 것이다. 예전에는 시스템 호출이 없었고 rmdir(2)( mkdir(2)여기서는 7판 UNIX™에 대해 논의하고 있습니다) 디렉토리를 제거하기 위해 시스템 호출을 rmdir(1)사용하는 SUID 루트 프로그램이었습니다(필수적으로) .unlink(2)

제7판 UNIX 매뉴얼은 다음 사이트에서 온라인으로 구할 수 있습니다.http://cm.bell-labs.com/7thEdMan(최종 확인 날짜: 2017-04-23); 다음 사이트에서도 구입 가능합니다.http://plan9.bell-labs.com/7thEdMan(최종 확인 날짜: 2017-04-23) 또한 온라인에는 적어도 하나의 대체 소스가 있는 것 같습니다.http://wolfram.schneider.org/bsd/7thEdManVol2/— 제2권의 기사에 대한 링크가 포함되어 있습니다.FreeBSD볼륨 1의 명령 및 시스템 호출에 대한 사이트입니다.

명령 rm(일반 비SUID 프로그램)은 rmdir(1)빈 디렉터리를 제거하는 명령을 호출했습니다. 그 자체로는 그렇게 할 수 없습니다. 루트 권한이 필요했습니다. 따라서 rmdir(1)명령(참조여기Unix V7의 소스 코드)는 빈 디렉터리를 제거하기 위해 존재했으며 rm명령은 빈 디렉터리 자체를 제거하지 않았습니다.

디렉터리를 제거하는 데 사용하려면 옵션 rm을 제공해야 합니다 -r.

대칭 논쟁도 있습니다. mkdir(1)디렉터리를 생성하려면 명령이 필요합니다 . rmdir(1)한 일을 취소하라는 명령을 갖는 것이 합리적으로 보입니다 mkdir(1). 게다가 그들은 (요즘) rmdir(2)mkdir(2)시스템 호출의 간단한 실행자입니다. 예, 7판 UNIX에서는 mkdir(1)SUID 루트 프로그램이기도 했습니다. mknod(2)호출을 사용하여 디렉토리 노드를 생성하고 호출을 사용하여 디렉토리에 및 항목을 link(2)생성했습니다. ....

답변2

"rm"은 디렉토리에서는 작동하지 않습니다. 재귀 삭제를 위해서는 rmdir을 사용하거나 -r 스위치를 지정해야 합니다. 그 이유는 역사적입니다. 별도의 시스템 호출 unlink이고 rmdirUnix 초기부터 있었습니다.

답변3

또한 rmdir은 제거만 합니다.비어 있는디렉토리. 디렉토리에서 추가 파일을 삭제하지 않으려면 rm에 별칭을 지정하여 삭제한 내용을 항상 확인해야 하는 경우를 제외하고, 즉 ~/.bashrc 또는 사용 중인 모든 파일에서 rmdir더 안전합니다 . ).rm -ralias rm='rm -i'

답변4

또한 rmdir글로빙(와일드카드) 표현식을 사용하여 빈 디렉터리를 쉽게 제거할 수 있습니다. 예를 들어, /tmp내용이 있는 파일이나 디렉터리를 건드리지 않고 모든 빈 디렉터리를 제거하려면 다음을 수행하세요 .

cd /tmp ; rmdir *

관련 정보