O que é um link físico no Linux?


9

Pesquisei e estou tentando entender a diferença entre um link físico e um link simbólico (link virtual).

Eu achei esse link bastante útil. Mas ainda não estou muito claro. Entendo que o link não é uma cópia do arquivo original, mas um link físico é uma cópia ou não?

Respostas:


15

Para usar uma analogia da entrega de correio, um link simbólico é algo como um endereço de encaminhamento ... quando algo tenta abrir um link simbólico, ele abre o "arquivo" (embora não seja literalmente um arquivo) armazenado lá e vê que ele deve procurar um arquivo com um nome diferente, para que ele abra o outro arquivo.

Um link físico é mais como ter dois endereços para o mesmo local. (Claro que isso não é realmente possível no mundo físico). Quando algo tenta ler o nome de um arquivo (endereço), ele obtém o mesmo arquivo físico (local).

Portanto, um link físico não é uma cópia, porque o arquivo é armazenado apenas uma vez (mas com vários nomes). Mas ele se comporta como uma cópia, porque você pode acessar as mesmas informações de dois nomes de arquivos.


+1 para uma analogia muito boa, o que teria simplificado as coisas para mim quando eu estava tentando entender isso.
John Gardeniers

11
+1, mas dois detalhes menores: 1) É possível ter vários endereços para o mesmo local no mundo real, o que não é comum. 2) Talvez a diferença mais importante entre um link físico e uma cópia seja que, se você tiver /fooe /bar, a alteração /footambém mudará /barse forem links físicos (porque são dois nomes para o mesmo arquivo), mas não se forem cópias (porque são dois arquivos completamente independentes).
Dave Sherohman

3

Não. Um link físico (segundo e todos os subsequentes) para um arquivo é um ponteiro para os mesmos inodes no disco.


3

Quando você cria um link físico, significa que o mesmo arquivo aparece em dois lugares diferentes. Um arquivo é realmente apenas uma referência a um conjunto de blocos de dados em discos, portanto, um link físico adiciona outra referência. Os arquivos raramente são realmente excluídos; as referências são removidas e, portanto, é impossível acessar os dados. É por isso que, quando você exclui um arquivo criado como um link físico, o outro arquivo original permanece e vice-versa.

Por outro lado, um link simbólico é uma direção para acessar um arquivo com um determinado nome. Diz a todos os programas: "Se você deseja usar este arquivo, está lá". É por isso que se você excluir o destino do link simbólico, o link simbólico será interrompido. E se você excluir o link, o destino não será afetado.


2

Um arquivo no sistema * nix possui duas partes. uma parte dos dados e outra é inode. O inode armazena informações meta (informações relevantes para os dados, como local onde estão armazenadas no HDD). O link físico cria cria uma cópia exata desse inode. Enquanto o link sym cria um inode que aponta para o inode do inode real. Portanto, os dados do inode no hardlink são os mesmos do destino, mas os dados diferentes no link sym. Portanto, para encurtar a história, os links simbólicos e os hard links diferem pelo conteúdo dos dados do inode e não pelos dados do arquivo. Este é o meu entendimento da diferença entre o link sym e o hard link. Eu tive um tempo difícil inicialmente entender isso, pois isso é algo mais interessante para o desenvolvedor e eu não sou um desenvolvedor. Oh conhecedores, por favor, corrija-me se eu estiver errado.


3
Um "diretório" no * nix é uma lista de nomes de arquivos e números de inode. Links físicos são duas entradas de diretório que possuem o mesmo número de inode e, portanto, referem-se exatamente ao mesmo inode, e não a cópias do inode. Um link simbólico é uma entrada de diretório que aponta para outra entrada de diretório (por nome), não para qualquer inode específico. (Ok, ele realmente tem um inode, mas que inode refere-se à entrada de diretório, e não a dados de arquivo.)
Randy Orrison
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.