O que acontece quando você exclui um link físico?

59

Se você faz rm myFile, onde myFileé um link de disco rígido, o que acontece?

trusktr
fonte

Respostas:

110

No Unix, todos os arquivos normais são Hardlinks. Os hardlinks em um sistema de arquivos Unix (e na maioria (todos?)) São referências ao que é chamado de inode. O inodecontador possui um contador de referência; quando você possui um "link" para o arquivo (que é o modus operandi normal), o contador é 1. Quando você cria um segundo, terceiro, quarto, etc. link, o contador é incrementado (aumentado) a cada tempo por um. Quando você exclui ( rm) um link, o contador é decrementado (reduzido) em um. Se o contador de links atingir 0, o sistema de arquivos remove inodee marca o espaço como disponível para uso.

Em resumo, contanto que você não exclua o último link, o arquivo permanecerá.

Edit:O arquivo permanecerá mesmo se o último link for removido . Essa é uma das maneiras de garantir que a segurança dos dados contidos em um arquivo não seja acessível a nenhum outro processo. A remoção completa dos dados do sistema de arquivos é feita apenas se os dados tiverem 0 links, conforme fornecidos em seus metadados e não estiverem sendo utilizados por nenhum processo.

Este IMHO é, de longe, a maneira mais fácil de entender os links físicos (e sua diferença dos links virtuais).

xenoterracida
fonte
7
Além disso, a chamada do sistema para excluir um arquivo é unlink().
Mouviciel 8/10/12
11
Isso não cobre a situação em que o arquivo está aberto quando o último link é unlinkeditado.
Cjm 8/10
5
@OrangeDog, não exatamente, porque os hardlinks não podem atravessar sistemas de arquivos e /procé um sistema de arquivos (virtual) separado.
Cjm 8/10
2
/ proc também espelha as estruturas de dados internas do kernel (é uma maneira do kernel do Linux expor certos dados em um formato razoavelmente bem definido, sem conceder a todos e diversos acesso direto à memória do kernel). Portanto, é mais preciso dizer que o kernel controla o fato de o arquivo estar aberto e expõe essas informações por meio de procfs.
um CVn
11
E sim, telefonar unlink()para excluir um arquivo me intrigou sem fim quando comecei a jogar com a programação C no MS-DOS algum tempo atrás, na primeira metade dos anos 90. :)
um CVn
12

O teste foi mais fácil do que eu pensava: criei um arquivo de texto e depois vinculei-o a ele. A exclusão do link físico não exclui o arquivo ao qual está vinculado e o arquivo vinculado permanece onde está.

trusktr
fonte
11
isso é verdade, mas não um quadro completo
xenoterracide
3
A chave é que a criação do arquivo de texto também adiciona um link físico. Nos sistemas de arquivos * NIX, todos os arquivos (inodes) devem ser vinculados pelo menos uma vez na estrutura de diretórios.
Pare de prejudicar Monica
0

todos os arquivos no seu disco são na verdade ponteiros para os dados reais da sua unidade. insira a descrição da imagem aqui

quando você cria um link físico para esse arquivo, o arquivo editado será direcionado para os mesmos dados que o arquivo original estava apontando.

insira a descrição da imagem aqui

como neste exemplo, a.txt estava apontando para os dados (bytes) do arquivo que está na unidade, quando o hardlink b.txt é criado, ele aponta para o que a.txt estava apontando.

removendo um deles não afetará o outro, eles serão separados um do outro.

MAS, quando você remover os dois, o sistema verá que os dados que estão no disco não têm nenhum arquivo apontando para ele; portanto, o sistema o considerará como um espaço livre e o substituirá quando desejar.

ZOLDIK
fonte
2
Eu acho importante que você esclareça que FILE "A.txt"é idêntico LINK "B.txt", principalmente porque você chamou um FILEe outro LINK. O link é realmente a seta preta.
roaima
sim, pensei que não ficaria claro que o b.txt é um arquivo com
link físico