it-swarm-pt.tech

Qual é a diferença entre unlink e rm?

A desvinculação é mais rápida que a rm?

64
Marcin

Ambos são um invólucro para a mesma função fundamental que é uma chamada do sistema unlink().

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

rm(1):

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

unlink(1):

  • Menos verificação de sanidade.
  • Não foi possível excluir os diretórios.
  • Não foi possível realizar a recursão.
  • Só pode aceitar um argumento de cada vez.
  • Marginalmente mais inclinado para chamadas únicas devido à sua simplicidade.
  • Mais lento quando comparado ao fornecimento de rm(1) múltiplos 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, estamos falando de uma chamada não adulterada para o sistema unlink(2) function, que agora percebo que provavelmente não é o que você está respondendo.

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 pendentes. O que é menos que o ideal.

Editar:

Desculpe, esclareceu a diferença entre unlink(1) e unlink(2). A semântica ainda difere entre plataformas.

69
Dan Carley

No nível de especificação do POSIX, o que rm faz é especificado com muito mais rigor do que o que desvincula faz.

A portabilidade do resultado provavelmente será melhor usando o rm, se o seu script tiver que ser executado nos SOs.

8
Mike G.

A parte mais 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 é importante, você não deve armazenar os dados no sistema de arquivos.

desvincular é apenas uma "luz" rm. O rm tem mais recursos, mas eles fazem a mesma coisa.

4
Thomas