Existe alguma diferença entre mv e {cp + rm o arquivo antigo} no Unix?

12
  • mv a b

  • cp a b ; rm a

Estes são dois conjuntos de instruções. Existe alguma diferença entre o que eles fazem?

    
por Lazer 28.01.2010 / 14:11

8 respostas

20

Supondo que os arquivos envolvidos estejam no mesmo sistema de arquivos, o mv simplesmente altera os ponteiros no sistema de arquivos, enquanto o cp copia todo o conteúdo do arquivo, e o rm mais uma vez altera os ponteiros. Então mv é muito mais eficiente.

    
por 28.01.2010 / 14:14
9

Sim, o mv tem a chance de ser atômico no mesmo disco, enquanto a combinação de cp e rm nunca tem.

Isto assume que mv é implementado usando rename() , que é a chamada que tem a garantia. Veja, por exemplo, este post de grupo de notícias , que cita POSIX:

This rename() function is equivalent for regular files to that defined by the ISO C standard. Its inclusion here expands that definition to include actions on directories and specifies behavior when the new parameter names a file that already exists. That specification requires that the action of the function be atomic.

    
por 28.01.2010 / 14:14
7

No mesmo sistema de arquivos, o mv altera a referência do diretório, apontando para o mesmo inode (dados do arquivo e metadados), assim:

  • é uma operação atômica (não pode ser interrompida por outra operação de arquivo de processo)
  • leva apenas uma quantidade trivial de espaço em disco adicional (o nome adicional no diretório)
  • preserva as permissões e propriedade de arquivos
  • pode ser muito mais rápido, dependendo da quantidade de dados

Copie e remova

  • não é atômico (outro processo pode interferir entre os comandos cp e rm)
  • requer o armazenamento dos dados do arquivo duas vezes no disco por um curto período (entre os comandos cp e rm)
  • altera as permissões de arquivo e a propriedade para os padrões
  • pode ser muito mais lento ou até falhar, dependendo da quantidade de dados
por 28.01.2010 / 15:30
4

Quando a origem e o destino estão no mesmo volume físico, a primeira abordagem é simplesmente uma renomeação e é muito rápida (mesmo que o (s) arquivo (s) seja muito grande).

cp & rm sempre terá que carregar / armazenar todos os dados, mesmo que não seja necessário.

    
por 28.01.2010 / 14:14
2

mv é essencialmente uma operação de "renomeação". Isso significa que o arquivo em si é deixado no mesmo local no disco. Nenhuma operação de arquivo real é executada.

    
por 28.01.2010 / 14:13
2

Sim.

mv simplesmente altera os metadados do sistema de arquivos no arquivo relacionado ao seu nome e localização, enquanto o cp cria uma cópia separada do arquivo, que leva muito mais como ele deve ler completamente o primeiro arquivo e depois gravar seu conteúdo em outro arquivo

    
por 28.01.2010 / 14:15
2

cp e rm é muito mais pesado no uso do disco e pode falhar por motivos de espaço em disco.

    
por 28.01.2010 / 14:15
2

A diferença é que mv conserva os atributos de arquivo, enquanto o cp, por padrão, não faz isso, por exemplo, configurando data de criação para a data atual.

Para substituir esse padrão, use "cp -p" para preservar a última modificação de dados, a hora do último acesso, o ID do usuário e o ID do grupo (somente se tiver permissões para isso), bits de permissão de arquivo e os bits SUID e SGID.

    
por 28.01.2010 / 15:07

Tags