atomicidade? Realmente não sei se o comando mv é atômico.
Adriano Varoli Piazza
Sim. Por que você pergunta?
1
Agora, mvé semelhante ao ln+ rm, no entanto, o primeiro funcionará para movimentos do sistema de arquivos cruzados (que depois se torna cp+ rm), enquanto o último falhará no ln(que não suporta links físicos do sistema de arquivos cruzados).
Chris Jester-Young
Cada dia é um dia de escola - para qualquer um vindo para esta querendo saber como substituir esse comportamento padrão é necessário o --remove-destinationswitch - stackoverflow.com/a/9371263/409638
robert
Respostas:
20
Supondo que os arquivos envolvidos estejam no mesmo sistema de arquivos, o mv simplesmente muda os ponteiros no sistema de arquivos, enquanto o cp copia todo o conteúdo do arquivo e o rm muda os ponteiros novamente. Então mv é muito mais eficiente.
@eSKay: Não. Dois cenários: 1. O destino não existe. mvapenas renomeia o arquivo (mesmo inode que o arquivo original). cpcria um novo inode para o novo arquivo. 2. O alvo existe. mvDesvincula (remove) o arquivo de destino e renomeia, em uma única etapa. cpsubstitui o inode do arquivo de destino.
Chris Jester-Young
7
Também mvnunca altera a permissão ou propriedade. Imagine que você deseja mover um arquivo do homedir do seu amigo para o seu próprio homedir. Se você mv, você vai acabar com um arquivo em sua casa que pertence ao seu amigo. Você não pode chownou, chmoddependendo das permissões, nem sequer o modifica ou lê. Se você cpseguir rmo arquivo pertencerá a você e está tudo bem.
Ludwig Weinzierl
9
Sim, o mv pode ser atômico no mesmo disco, enquanto a combinação de cp e rm nunca.
Isso pressupõe que o mv seja implementado usando rename(), que é a chamada que tem a garantia. Veja, por exemplo, esta postagem do grupo de notícias , que cita POSIX:
Essa função rename () é equivalente para arquivos regulares àquela definida pelo padrão ISO C. Sua inclusão aqui expande essa definição para incluir ações em diretórios e especifica o comportamento quando o novo parâmetro nomeia um arquivo que já existe. Essa especificação requer que a ação da função seja atômica.
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 os arquivos sejam muito grandes).
cp& rmsempre terá que carregar / armazenar todos os dados, mesmo que não sejam necessários.
mv é essencialmente uma operação de "renomear". Isso significa que o próprio arquivo é deixado no mesmo local no disco. Nenhuma operação de arquivo real é executada.
O mv simplesmente altera os metadados do sistema de arquivos no arquivo, relacionados ao seu nome e localização, enquanto o cp cria uma cópia separada do arquivo, que leva muito mais tempo, pois deve ler completamente o primeiro arquivo e gravar seu conteúdo em outro arquivo.
A diferença é que o mv conserva os atributos do arquivo, enquanto o cp, por padrão, não, por exemplo, configurando a 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), os bits de permissão de arquivo e o SUID e SGID bits.
mv
é semelhante aoln
+rm
, no entanto, o primeiro funcionará para movimentos do sistema de arquivos cruzados (que depois se tornacp
+rm
), enquanto o último falhará noln
(que não suporta links físicos do sistema de arquivos cruzados).--remove-destination
switch - stackoverflow.com/a/9371263/409638Respostas:
Supondo que os arquivos envolvidos estejam no mesmo sistema de arquivos, o mv simplesmente muda os ponteiros no sistema de arquivos, enquanto o cp copia todo o conteúdo do arquivo e o rm muda os ponteiros novamente. Então mv é muito mais eficiente.
fonte
mv
apenas renomeia o arquivo (mesmo inode que o arquivo original).cp
cria um novo inode para o novo arquivo. 2. O alvo existe.mv
Desvincula (remove) o arquivo de destino e renomeia, em uma única etapa.cp
substitui o inode do arquivo de destino.mv
nunca altera a permissão ou propriedade. Imagine que você deseja mover um arquivo do homedir do seu amigo para o seu próprio homedir. Se vocêmv
, você vai acabar com um arquivo em sua casa que pertence ao seu amigo. Você não podechown
ou,chmod
dependendo das permissões, nem sequer o modifica ou lê. Se vocêcp
seguirrm
o arquivo pertencerá a você e está tudo bem.Sim, o mv pode ser atômico no mesmo disco, enquanto a combinação de cp e rm nunca.
Isso pressupõe que o mv seja implementado usando
rename()
, que é a chamada que tem a garantia. Veja, por exemplo, esta postagem do grupo de notícias , que cita POSIX:fonte
No mesmo sistema de arquivos, o mv altera a referência do diretório, apontando para o mesmo inode (dados e metadados do arquivo), assim:
Copie e remova
fonte
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 os arquivos sejam muito grandes).
cp
&rm
sempre terá que carregar / armazenar todos os dados, mesmo que não sejam necessários.fonte
mv é essencialmente uma operação de "renomear". Isso significa que o próprio arquivo é deixado no mesmo local no disco. Nenhuma operação de arquivo real é executada.
fonte
Sim.
O mv simplesmente altera os metadados do sistema de arquivos no arquivo, relacionados ao seu nome e localização, enquanto o cp cria uma cópia separada do arquivo, que leva muito mais tempo, pois deve ler completamente o primeiro arquivo e gravar seu conteúdo em outro arquivo.
fonte
cp e rm é muito mais pesado no uso do disco e pode falhar por motivos de espaço em disco.
fonte
A diferença é que o mv conserva os atributos do arquivo, enquanto o cp, por padrão, não, por exemplo, configurando a 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), os bits de permissão de arquivo e o SUID e SGID bits.
fonte