Qual é a razão para que rmdir (1) e rm (1) coexistam?

13

Eu uso BSD e Linux todos os dias, nunca tive uma circunstância que eu deva usar rmdir (1) ao invés de rm (1). Qual é o propósito da existência de rmdir?

    
por Howard 29.05.2012 / 04:55

4 respostas

23

O principal motivo é provavelmente histórico. Nos tempos antigos, não havia rmdir(2) e mkdir(2) chamadas de sistema (estamos discutindo a 7ª edição UNIX ™ aqui), e rmdir(1) era (necessariamente) um programa de raiz SUID que usava o unlink(2) chamada do sistema para remover diretórios.

Os manuais da 7ª edição do UNIX estão disponíveis online no link (última verificação em 2017-04-23); Eles também estão disponíveis no link (marcado pela última vez em 2017-04-23). Também parece haver pelo menos uma fonte alternativa on-line - link - para os artigos no Volume 2, com um link para o site FreeBSD para os comandos e chamadas do sistema no Volume 1.

O comando rm (um programa comum não-SUID) chamou o comando rmdir(1) para remover diretórios vazios. Não poderia fazê-lo; que requer privilégios de root. Então, o comando rmdir(1) (veja aqui para seu código-fonte no Unix V7) existia para remover diretórios vazios, e o comando rm não removeu diretórios vazios em si.

Para usar rm para remover diretórios, você precisa dar a opção -r .

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) fez. Além disso, eles são (hoje em dia) simples exercitadores das chamadas do sistema rmdir(2) e mkdir(2) - sim, de volta no 7th Edition UNIX, mkdir(1) também era um programa raiz SUID, usando a chamada mknod(2) para criar um diretório e a chamada link(2) para criar as entradas . e .. no diretório.

    
por 29.05.2012 / 05:04
6

"rm" não funciona nos diretórios. Você deve usar rmdir ou especificar a opção -r para uma exclusão recursiva. O motivo é histórico: unlink e rmdir são chamadas de sistema separadas e foram dos primeiros dias do Unix.

    
por 29.05.2012 / 05:00
3

O rmdir também remove apenas os diretórios empty . Se você quiser ter certeza de não excluir nenhum arquivo adicional em um diretório, rmdir é mais seguro que rm -r (exceto se você aliasse rm de tal forma que você sempre precisa confirmar o que foi excluído, ex. alias rm='rm -i' in ~ / .bashrc ou o que você estiver usando).

    
por 09.06.2012 / 07:43
1

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 em /tmp sem tocar em nenhum arquivo ou diretório com conteúdo:

cd /tmp ; rmdir *
    
por 20.12.2014 / 06:16

Tags