De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


hard link vs soft link

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 02 de outubro de 2010

Eu estava lendo um artigo interessante sobre o assunto :

Softlinks vs. Hardlinks: A Quick Explanation.

Tá, ele está em inglês, mas muitos aqui têm capacidade de ler, por isto fica a dica do artigo. Um resumo da história é que o soft link tem que ser usado sempre que o hard link não funcionar (para diretórios ou para arquivos em outros sistemas de arquivos). De resto use o que quiser. Pode haver um ganho marginal de desempenho para o hard link, mas no dia-a-dia da gente isto não vai fazer muita diferença.

Tá, você está escrevendo uma dica só para apontar um artigo? Não, é que lendo o artigo me lembrei de vários "causos" onde trabalhava com programas que geravam arquivos temporários que poderia ser interessante olhar para, por exemplo, poder analisar uma mensagem de erro ou verificar se um passo intermediário estava sendo executado corretamente ou não. O problema é que o arquivo era transiente, existia durante um tempo, ao fim do qual ele era removido pelo software.

Como conseguir analisar um arquivo destes?

Simples, durante a execução, enquanto o arquivo existia, bastava fazer um hard link para um outro nome. Se o diretório do arquivo temporário fosse permanente (p. ex. o '/tmp') bastava fazer um hard link no mesmo diretório. Se o diretório também fosse transiente era só criar um outro diretório fora deste e criar os hard link por lá.

Mas quando o arquivo original fosse removido não se perderia tudo?

Não Quando se remove um arquivo o que o sistema faz é subtrair de uma unidade o link count. Se o link count chegar a zero o arquivo é removido da tabela do sistema e o espaço tornado disponível para reuso. Se o link count não for zero apenas a entrada do diretório é removida, os dados continuam disponíveis através do outro nome.

Por exemplo :

  $ cd /tmp
  $ date > blah.txt
  $ cat blah.txt
  $ ls -l blah.txt
  -rw-r--r-- 1 roxo roxo 29 2010-09-28 22:15 blah.txt

Vejam aquele "1" antes do nome do proprietário do arquivo. Aquele é o link count. Vamos criar um hard link para este arquivo

  $ ln blah.txt bloh.txt
  $ ls -l bl*.txt
  -rw-r--r-- 2 roxo roxo 29 2010-09-28 22:15 blah.txt
  -rw-r--r-- 2 roxo roxo 29 2010-09-28 22:15 bloh.txt

Ahá !!! Agora o link count está com o valor "2". Portanto se o arquivo 'blah.txt' for o arquivo transiente, o que acontecerá se ele for removido pelo programa?

  $ rm -f blah.txt
  $ ls -l bl*.txt
  -rw-r--r-- 1 roxo roxo 29 2010-09-28 22:15 bloh.txt

E o link count volta para "1". O que aconteceu com o conteúdo?

  $ cat bloh.txt
  Ter Set 28 22:15:06 BRT 2010

Resumindo, embora o arquivo transiente 'blah.txt' seja removido, o seu conteúdo original continua disponível através do uso de um hard link.

É claro que isto pode ser usado para um conjunto de arquivos gerados durante a execução de um programa ou de uma sequência de programas encadeados por pipes. Como fazer para um conjunto de arquivos? Da mesma maneira. Normalmente usando um script, mas deixo isto como exercício para o leitor. ;)

HTH

Error: No site found with the domain 's2.dicas-l.com.br' (Learn more)