Eu uso BSD e Linux todos os dias, nunca tive uma circunstância em que devesse usar rmdir(1) em vez de rm(1). Qual é o propósito da existência do rmdir?
Responder1
A principal razão é provavelmente histórica. Antigamente, não existiam chamadas rmdir(2)
de mkdir(2)
sistema (estamos discutindo a 7ª Edição UNIX™ aqui) e rmdir(1)
era (necessariamente) um programa raiz SUID que usava a unlink(2)
chamada de sistema para remover diretórios.
Os manuais do UNIX da 7ª Edição estão disponíveis on-line emhttp://cm.bell-labs.com/7thEdMan(última verificação em 23/04/2017); Eles também estão disponíveis emhttp://plan9.bell-labs.com/7thEdMan(última verificação em 23/04/2017). Também parece haver pelo menos uma fonte alternativa online –http://wolfram.schneider.org/bsd/7thEdManVol2/— para os artigos do Volume 2, com link para oFreeBSDsite para os comandos e chamadas de sistema no Volume 1.
O rm
comando (um programa normal não SUID) invocou o rmdir(1)
comando para remover diretórios vazios. Não poderia fazê-lo sozinho; que exigia privilégios de root. Então, o rmdir(1)
comando (vejaaquipara seu código-fonte no Unix V7) existia para remover diretórios vazios, e o rm
comando não removeu diretórios vazios por si só.
Para usar rm
para remover diretórios, você tem que dar a -r
opção.
Há também um argumento de simetria. Você precisa de um comando mkdir(1)
para criar diretórios; parece razoável ter um comando rmdir(1)
para desfazer o que mkdir(1)
aconteceu. Além disso, eles são (hoje em dia) simples exercitadores das chamadas de sistema rmdir(2)
e mkdir(2)
- sim, na 7ª edição do UNIX, mkdir(1)
também era um programa raiz SUID, usando a mknod(2)
chamada para criar um nó de diretório e a link(2)
chamada para criar as entradas .
e ..
no diretório .
Responder2
"rm" não funciona em diretórios. Você deve usar rmdir ou especificar a opção -r para uma exclusão recursiva. A razão é histórica: unlink
e rmdir
são chamadas de sistema separadas e existem desde os primeiros dias do Unix.
Responder3
Além disso, rmdir remove apenasvaziodiretórios. Se você quiser ter certeza de não excluir nenhum arquivo adicional em um diretório, rmdir
é mais seguro do que rm -r
(exceto se você tiver um alias rm de modo que você sempre precise confirmar o que excluiu, ou seja, alias rm='rm -i'
em ~/.bashrc ou o que quer que esteja usando ).
Responder4
Além disso, rmdir
facilita a remoção de diretórios vazios com expressões globbing (curinga). Por exemplo, para remover todos os diretórios vazios /tmp
sem tocar em nenhum arquivo ou diretório com conteúdo:
cd /tmp ; rmdir *