A vinculação de um link rígido de diretório a seus subarquivos?

0

Suponha que eu tenha a seguinte configuração:

  • Pasta A
    • file1
    • arquivo2

Eu, então, criar um link da pasta A da seguinte forma: ln -s A B , de modo que agora temos:

  • Pasta A
    • file1
    • arquivo2
  • Pasta B (link simbólico da pasta A (softlink))
    • file1
    • arquivo2

Agora, quando eu altero B/file1 , essa alteração se propaga para A/file1 . No entanto, parece que - ao usar ls -l em B - que B/file1 e B/file2 são não soft vinculado a A/file1 e A/file2 ! O que está acontecendo?

Pergunta: É verdade que B/file1 está vinculado a A/file1 ? Outra maneira de perguntar isso: é verdade que quando você faz o link de um diretório, seus subarquivos tornam-se links físicos para os subarquivos do diretório original? Existe uma maneira de tornar tudo um link flexível?

    
por DD343 28.10.2015 / 17:53

2 respostas

3

Eles não são links físicos por dois motivos:

  1. A contagem de links físicos para arquivos em diretórios vinculados como apresentados por ls é 1. Se os arquivos estivessem vinculados, a contagem seria 2 ou mais.
  2. Os links físicos não podem abranger os sistemas de arquivos, enquanto os soft links podem. Se os links físicos fossem criados, não seria possível criar diretórios de links simples nos sistemas de arquivos.

O que você realmente está vendo é apenas outra maneira de acessar o mesmo diretório de diferentes caminhos. Uma vez que você esteja no diretório ou operando os arquivos neles, eles são exatamente os mesmos arquivos (pense em adicionar uma porta a uma sala, o conteúdo não muda, mas há uma nova maneira de entrar).

Se você quisesse que o conteúdo do diretório fosse soft links, você precisaria criar links suaves para cada arquivo no diretório em vez do próprio diretório, mas isso tornaria as listagens de diretório um pouco confusas. Além de ter nomes diferentes para as fontes e os alvos, não tenho certeza de qual vantagem você obteria com isso.

    
por 28.10.2015 / 18:25
3

Parece que você está confundindo as coisas.

Link simbólico : Um link simbólico apenas aponta para outro caminho no sistema. Esse caminho pode existir ou não, isso não importa, também pode ser absoluto ou relativo. Um link simbólico não tem nada a ver com o arquivo de destino, apenas aponta. Pode até estar em outro disco físico. Pode ser comparado a um hiperlink em um site.

Hardlink : Um hardlink é uma atribuição de um nome a um arquivo (precisamente o número de inode do arquivo). Essa relação é chamada de sobrejetor . Cada arquivo tem pelo menos um hardlink referindo-se ao seu número de inode. O número do inode é a referência para o arquivo. Os sistemas de arquivos modernos não têm, portanto, nenhuma atribuição de correção do nome do arquivo e do arquivo real.

Se um arquivo tiver dois hardlinks referentes a seu inode e um deles for excluído (pela chamada de sistema unlink() ), apenas esse hardlink será removido, o arquivo e o inode permanecerão intocáveis (é por isso que a chamada do sistema é denominada unlink() não delete() ). Assim que o número de hardlinks diminui para zero, o inode é finalmente removido e, portanto, o arquivo.

Então essa foi a teoria.

Quando você altera B/file1 , então A/file1 também é alterado, porque é o mesmo referindo-se ao mesmo número do inode referindo-se ao mesmo arquivo. Você acabou de ler o link simbólico A apontando para o diretório B , em vez do diretório real B .

    
por 28.10.2015 / 18:28