Qual é a diferença entre um link físico e um link simbólico?

437

Como o título diz, eu gostaria de saber a diferença entre um hard link e um link soft criado pelo comando ln . O comando man ln fornece informações, mas não responde suficientemente à minha pergunta.

Além disso, seria bom se alguém pudesse fornecer uma configuração em que o link físico fosse preferível a um link simbólico.

    
por ste_kwr 29.02.2012 / 10:03
fonte

10 respostas

25

No Linux / Unix Atalhos são conhecidos como Link

Link são de dois tipos Soft links (links simbólicos) ou Hard link

  1. Soft Links (links simbólicos)

    Você pode criar links para arquivos & amp; pasta & amp; você pode criar link (atalho) em diferentes partições & amp; tem um número de inode diferente do original.

    Se a cópia real for excluída, o link não funcionará .

  2. Links físicos

    Somente para arquivos & amp; você não pode criar em partições diferentes (deve estar na mesma partição) & amp; tem o mesmo número de inode que o original

    Se a cópia real for excluída, o link funcionará (porque ela age como arquivo original)

Pergunta: Como criar um link simples?

Resposta: Um link suave pode ser feito com ln -s , primeiro você precisa definir a fonte e então você precisa definir o destino (tenha em mente que você precisa definir o caminho completo de origem e destino, caso contrário não irá funcionar)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

Como você pode ver se tem inode diferente e pode ser feito em partições diferentes

Pergunta: Como criar um link físico?

Answer: Um link Hard pode ser feito com ln , primeiro você precisa definir a fonte e então você precisa definir o destino (tenha em mente que você precisa definir o caminho completo de origem e destino, caso contrário não irá funcionar)

Eu tenho um script no nome da pasta / script firefox

 ls -i   ( Shows you the inode )
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

Como você pode ver, ele tem o mesmo inode e, se eu excluir o original, o link funcionará, pois ele age como original

1º eu tenho que verificar se o link está funcionando ou não, então eu deletei o script firefox

Pergunta: Seria bom se alguém pudesse fornecer uma configuração em que o link físico fosse preferível a um link simbólico.

Resposta : Dependendo do layout da partição de disco, Hard Link a limitação deve estar na mesma partição (-1 ponto) e pode ser do arquivo (-1 ponto) ), mas +1 ponto é que, se o original for excluído, o link funcionará como se fosse original

onde um link flexível pode ser feito de pastas & amp; arquivos (+1 ponto), Sem limitação de partição (+1 ponto), Mas somente (- 1 ponto) é que, se a fonte for excluída, o link não funcionará

    
por Qasim 09.05.2013 / 02:42
fonte
307

Um hardlink não é um ponteiro para um arquivo, é uma entrada de diretório (um arquivo) apontando para o mesmo inode. Mesmo se você alterar o nome do outro arquivo, um link físico ainda aponta para o arquivo. Se você substituir o outro arquivo por uma nova versão (copiando-o), um link físico não apontará para o novo arquivo. Você só pode ter hardlinks dentro do mesmo sistema de arquivos. Com hardlinks você não tem o conceito dos arquivos e links originais, todos são iguais (pense nisso como uma referência a um objeto). É um conceito de muito baixo nível.

Por outro lado, um link simbólico está apontando para outro caminho (um nome de arquivo); Ele resolve o nome do arquivo toda vez que você o acessa através do symlink. Se você mover o arquivo, o link simbólico não seguirá. Se você substituir o arquivo por outro, mantendo o nome, o link simbólico apontará para o novo arquivo. Links simbólicos podem abranger sistemas de arquivos. Com links simbólicos você tem uma distinção muito clara entre o arquivo real e o link simbólico, que não armazena nenhuma informação ao lado do caminho sobre o arquivo para o qual ele aponta.

    
por vartec 18.05.2011 / 11:51
fonte
282

"Uma imagem vale mais que mil palavras."

E "Um exemplo vale cem parágrafos ..."

Crie dois arquivos:

$ touch blah1   
$ touch blah2

Insira alguns dados neles:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

E como esperado:

$cat blah1; cat blah2
Cat
Dog

Vamos criar links físicos e diretos:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Vamos ver o que aconteceu:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Alterar o nome de blah1 não importa:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard aponta para o inode, o conteúdo do arquivo - que não foi alterado.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

O conteúdo do arquivo não pôde ser encontrado porque o link virtual aponta para o nome que foi alterado e não para o conteúdo.
Similarmente, Se blah1 for deletado, blah1-hard ainda contém o conteúdo; se blah2 for deletado, blah2-soft é apenas um link para um arquivo não existente.

source: copiando descaradamente de StackOverflow!

    
por ABcDexter 21.07.2016 / 09:33
fonte
87

Ambos são ponteiros para arquivos; a diferença é o tipo de ponteiro. Um link simbólico aponta para outro arquivo por nome . Ele possui um bit de modo especial que o identifica como um link simbólico e seu conteúdo é o nome do arquivo real. Como ele contém apenas um nome, esse nome não precisa existir, ou pode existir em um sistema de arquivos diferente. Se você substituir o arquivo nomeado (alterar seu conteúdo sem afetar seu nome), o link ainda conterá o mesmo nome e, agora, apontará para o novo arquivo. Você pode identificar facilmente um link simbólico e ver o nome do arquivo para o qual ele aponta.

Um link físico aponta para o arquivo pelo número do inode. Como tal, os links físicos não são diferentes do primeiro nome de um arquivo. Não há nome "real" vs. nome do link físico; Todos os hard links são nomes igualmente válidos para o arquivo. Por causa disso, o arquivo ao qual você está vinculado deve existir e estar no mesmo sistema de arquivos em que você está tentando criar o link. Se você excluir o nome original, o link físico ainda apontará para o mesmo arquivo. Como todos os links físicos são nomes igualmente válidos para o arquivo, você não pode olhar para um e ver os outros nomes para o arquivo; para encontrar isso, você tem que ir olhando cada arquivo e comparar o seu número de inode para encontrar o (s) outro (s) nome (s) que possuem o mesmo número de inode.

Você pode informar quantos nomes um arquivo possui da saída de ls -l . O primeiro número após o modo de arquivo é a contagem de links. Um arquivo com mais de um link possui outro (s) nome (s) em algum lugar e, inversamente, um arquivo com uma contagem de links de apenas 1 não possui (outros) hard links.

    
por psusi 18.05.2011 / 17:23
fonte
56

Um hardlink só pode funcionar no mesmo sistema de arquivos, é simplesmente um nome diferente para o mesmo inode (arquivos são referenciados internamente por inodes). Um arquivo só será excluído do disco quando o último link para seu inode desaparecer (você rm d ou unlink d o último link). Os hardlinks geralmente funcionam apenas para arquivos, não para diretórios.

Um link simbólico (link simbólico) é um arquivo especial que contém um caminho para outro arquivo. Esse caminho pode ser absoluto ou relativo. links simbólicos podem funcionar em sistemas de arquivos, e podem até apontar para arquivos diferentes, se, por exemplo, você desconectar um disco rígido externo e substituí-lo por outro, que tem um arquivo diferente no mesmo caminho. Um link simbólico pode apontar para arquivos ou diretórios.

    
por knittl 29.02.2012 / 10:20
fonte
20

Uma das respostas do outro tópico (agora vinculada da parte superior de sua postagem) menciona esta página que eu acho que é uma boa explicação de nível médio. Se você está se perdendo na arte ascii, aqui está a versão dr:

  • Os arquivos padrão são um ponteiro do sistema de arquivos para um inode que, por sua vez, aponta para dados físicos. O componente de arquivo armazena seu link para o sistema de arquivos (essencialmente seu caminho) e um link para o inode.
  • Hard-links, são como arquivos. Eles são apenas um ponteiro adicional diretamente para um inode.
  • Os links simbólicos são arquivos separados (incluindo inode e dados separados) que armazenam um caminho do sistema de arquivos para um arquivo.

O kernel e os sistemas de arquivos envolvidos traduzem tudo de forma transparente.

Então, com base nisso:

  • Os hard-links permitem apenas a vinculação do mesmo sistema de arquivos. Os links simbólicos podem apontar para qualquer caminho.
  • Hard-links (essencialmente) apontam para dados absolutos. Os links simbólicos podem apontar para caminhos relativos (por exemplo, ../parent.file )
  • Por extensão, se você mover o ponteiro de destino de um link físico (que, lembre-se, em si é essencialmente apenas um link físico apontando para um inode), o link físico ainda funciona. Mover o alvo de um link simbólico normalmente quebraria o link simbólico.
  • Resolver um link físico seria mais rápido, mas incomensurável. Essa parte insignificante da velocidade vem ao custo de um sistema de arquivos inflexível.

Eu poderia ter me confundido um pouco, mas lendo várias coisas, estou lutando para encontrar a diferença entre um arquivo padrão e um link físico. A maneira como estou lendo é que todo arquivo consiste em um link físico (armazenando o nome do arquivo), vinculando a um inode que aponta para dados físicos.

Adicionar um hardlink apenas fornece um inode com um ponteiro adicional baseado no sistema de arquivos. Está certo?

    
por Oli 18.05.2011 / 17:10
fonte
15

Quando usar o Soft Link:

Link entre sistemas de arquivos: Se você quiser vincular arquivos nos sistemas de arquivos, só poderá usar links simbólicos / soft links.

Links para o diretório: se você quiser vincular diretórios, deve usar os Soft links, pois não é possível criar um link físico para um diretório.

Quando usar o Hard Link:

Espaço de armazenamento: Links rígidos exigem muito pouco espaço, pois não há novos inodes criados durante a criação de links físicos. Em soft links criamos um arquivo que consome espaço (geralmente 4KB, dependendo do sistema de arquivos)

Desempenho: O desempenho será um pouco melhor ao acessar um link físico, já que você está acessando diretamente o ponteiro do disco em vez de passar por outro arquivo. Movendo o local do arquivo: Se você mover o arquivo de origem para algum outro local no mesmo sistema de arquivos, o link físico ainda funcionará, mas o link flexível falhará.

Redundância: Se você quer ter certeza da segurança de seus dados, você deve estar usando hard link, como em hard link, os dados são seguros, até que todos os links para os arquivos sejam deletados, ao invés do link soft, você perderá os dados se a instância do mestre do arquivo for excluída.

    
por Osama 07.09.2014 / 01:48
fonte
7

A confusão se instala quando você tenta encontrar a diferença entre "o nome do arquivo" e um link físico, porque não há nenhum.

Cada arquivo que você cria consiste em dados no disco e um link físico - que é um nome de arquivo em um diretório e um ponteiro para os dados no disco. Fim da história. Quando o último (ou único) link físico é excluído, o sistema operacional sabe que os dados não são mais necessários.

Com isso, você pode ver que os dados reais nunca são excluídos, apenas os links físicos são. E quando fica bastante lotado no disco, os dados podem ser substituídos pelos dados de outro arquivo. Até lá, os dados do arquivo excluído podem ser recuperados, mas é difícil encontrá-lo sem o link físico.

Os links simbólicos, conforme explicado anteriormente, simplesmente informam "há um arquivo chamado <targetname> em uma pasta chamada <targetfolder> ". Eles apontam para o link rígido. Eles não sabem onde estão os dados. O link físico sabe disso.

    
por Gonesoft 01.03.2015 / 12:28
fonte
3

Para uma excelente explicação noob -e- ex-Windoze -user- amigável , com bons diagramas e uma FAQ confira esta página link . Suas restrições de direitos autorais me impedem de extrair suas informações, então basta fornecer o link aqui.

Esta é a minha segunda ou terceira tentativa de apreender o enigma soft / hard-link, sempre jogando a toalha e adiando meu entendimento para algum ponto indefinido no futuro - assim que as explicações e man-pages fique profundamente centrado e super técnico com inodes e tudo ...

Aproveite!

    
por nutty about natty 10.02.2013 / 17:03
fonte
0

É muito simples. Arquivos (e diretórios!) São armazenados em endereços no dispositivo de bloco (HDD ou qualquer outro). Normalmente você tem um único nome mapeado para um endereço, e é assim que você obtém seu arquivo. Um hard link é um segundo, terceiro, etc, mapeado para o mesmo endereço. Um link simbólico refere-se ao símbolo - o nome - e assim é um segundo nome mapeado para o primeiro nome. No que diz respeito ao kernel, uma vez que ele lê o destino do link simbólico ele para e volta ao início com o valor alvo como o nome do arquivo (mais ou menos), então links simbólicos relativos são possíveis mas descontroladamente inúteis. O nome do alvo não é usado acima do nível do sistema de arquivos, exceto se for explicitamente consultado no código do espaço do usuário.

    
por Jim Driscoll 03.07.2016 / 17:39
fonte