Qual é a diferença entre unlink e rm?

59

É desvinculado mais rápido que o rm?

    
por Marcin 10.07.2009 / 10:49

3 respostas

63

Ambos são um wrapper para a mesma função fundamental que é uma chamada de sistema unlink() .

Para ponderar as diferenças entre os utilitários do usuário.

rm(1) :

  • Mais opções.
  • Mais feedback.
  • Verificação de sanidade.
  • Um pouco mais lento para chamadas individuais como resultado do acima.
  • Pode ser chamado com vários argumentos ao mesmo tempo.

unlink(1) :

  • Menos verificação de sanidade.
  • Não é possível excluir diretórios.
  • Incapaz de reciclar.
  • Só pode aceitar um argumento de cada vez.
  • Marginalmente mais enxuta para chamadas individuais devido à sua simplicidade.
  • Mais lento quando comparado com a exibição de rm(1) de vários argumentos.

Você pode demonstrar a diferença com:

$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand '2'

$ touch $(seq 1 100)
$ time rm $(seq 1 100)

real    0m0.048s
user    0m0.004s
sys     0m0.008s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done

real    0m0.207s
user    0m0.044s
sys     0m0.112s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done

real    0m0.167s
user    0m0.048s
sys     0m0.120s

Se, no entanto, estivermos falando de uma chamada não adulterada para a função unlink(2) do sistema, o que agora percebo provavelmente não é o que você está contando.

Você pode executar um sistema unlink() em diretórios e arquivos. Mas se o diretório for pai de outros diretórios e arquivos, o link para esse pai será removido, mas os filhos ficarão pendurados. Qual é menos que ideal.

Editar:

Desculpe, esclarecemos a diferença entre unlink(1) e unlink(2) . Semântica ainda vai diferir entre plataforma.

    
por 10.07.2009 / 10:58
6

No nível de especificação POSIX, o que rm é especificado com muito mais precisão do que < a href="http://www.opengroup.org/onlinepubs/009695399/utilities/unlink.html"> desvincular .

A portabilidade do resultado parece ser melhor usando rm, se seu script tiver que ser executado em sistemas operacionais.

    
por 10.07.2009 / 14:44
4

A parte lenta da remoção é o código do sistema de arquivos e o material do disco, não a preparação do espaço do usuário da chamada do sistema unlink ().

Ou seja, se a diferença de velocidade for importante, você não deverá armazenar os dados no sistema de arquivos.

unlink é apenas uma rm "light". rm tem mais recursos, mas eles fazem a mesma coisa.

    
por 10.07.2009 / 13:46