Existe uma diferença entre vincular com cp -l ou ln?

15

Estou implementando um esquema de backup usando rsync e hardlinks. Eu sei que posso usar o link-dest com o rsync para fazer os hardlinks, mas vi a menção de usar "cp -l" antes da implementação do "link-dest" no rsync. Outro método de vinculação que conheço é "ln".

Portanto, minha pergunta é, por curiosidade: existe uma diferença em criar hardlinks usando "cp -l" em comparação com "ln"?

twan163
fonte
Os links são indistinguíveis.
rici 9/08/2014
Você quer dizer que não há diferença? Eles poderiam ser usados ​​de forma intercambiável?
precisa saber é o seguinte
Eu mesmo fiz um pequeno teste, mas não pude ver nenhuma diferença entre os dois, à primeira vista.
precisa saber é o seguinte
cp: illegal option -- ltem certeza de que cp tem uma opção l?
Tom

Respostas:

16

Os resultados de ambos devem ser os mesmos, pois um link físico é criado para o arquivo original.

A diferença está no uso pretendido e, portanto, nas opções disponíveis para cada comando. Por exemplo, cppode usar recursão enquanto lnnão pode:

cp -lr <src> <target>

criará links físicos <target>para todos os arquivos <src>. (cria novos diretórios; não links) O resultado será que a estrutura da árvore de diretórios abaixo <target>será idêntica àquela abaixo <src>. Será diferente do fato cp -r <src> <target>de que o último copiará cada arquivo e pasta e dará a cada um um novo, inodeenquanto o primeiro usa apenas links físicos nos arquivos e, portanto, simplesmente aumenta sua Linkscontagem.

Quando usado para copiar um único arquivo, como no seu exemplo, os resultados serão idênticos.

garethTheRed
fonte
se eu entendi corretamente, "cp -lr" criará hardlinks para todos os arquivos, mas se houver diretórios ausentes no <target>, eles serão criados como novos (ou seja, não há hardlinks para os diretórios no <target>)?
precisa saber é o seguinte
Sim esta correto. Você não pode criar links físicos para diretórios. Portanto, para manter a estrutura de arquivos / diretórios, torna-se links físicos para arquivos dentro de diretórios 'reais'.
precisa saber é o seguinte
sobre o comportamento de "cp -lr": hardlinks para arquivos ... novos diretórios para diretórios. parece um pouco estranho, mas acho que esse comportamento "estranho" é um efeito colateral das restrições (não pode ter hardlinks de diretórios). ||| FYI também para referência, aqui estão alguns links para informações sobre hardlinks não permitidos para directoreis ref1 do askubuntu e ref2 do unix.stackexchange .
Trevor Boyd Smith
2

O link usa o mínimo de chamadas do sistema, seguido por ln e finalmente cp :

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410
Steven Penny
fonte