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


Como o título diz, eu gostaria de saber a diferença entre um hard link e um soft link criado pelo comando ln. O comando man ln fornece informações, mas não responde suficientemente a 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.


447
2018-02-29 09:03


origem


uma das diferenças ... você tem algum arquivo, por exemplo, teste de arquivo. Se você fizer ln teste hardlink, faça ln -s teste symlink e, em seguida, mova o teste de arquivo para outro dir (ou renomear), symlink não funcionará. Hardlink irá funcionar. Agora tente excluir o teste de arquivo. Hardlink ainda vai funcionar, na verdade você ainda será capaz de acessar o arquivo até o número de hardlinks para o arquivo não é 0. Isso é por causa de inodes, está escrito em manual ... - Denwerko
Eu reabri isso porque merece uma boa resposta genérica sobre esta questão (ao contrário da pergunta anterior, que era um exemplo obscuro do C). - Oli♦
Melhor resposta: youtube.com/watch?v=aO0OkNxDJ3c - Abhishek Bhatia
Também uma resposta bastante completa: stackoverflow.com/questions/185899/… - Elzo Valugi
@AbhishekBhatia o vídeo não está disponível - Ooker


Respostas:


 No Linux / Unix, os atalhos são conhecidos como Links


Os links são de dois tipos: soft links (links simbólicos) ou hard links.

  1. Links Suaves (links simbólicos)

    Você pode criar links para arquivos e diretórios e pode criar links (atalhos) em diferentes partições e com um número de inode diferente do original.

    Se o real cópia é apagada, o link não funciona.

  2. Links Difíceis

    Os links físicos são apenas para arquivos; você não pode vincular a um arquivo na partição diferente com um número de inode diferente.

    Se o real cópia é eliminada a link funcionará, porque acessa os dados subjacentes que a cópia real estava acessando.


Questão: Como faço link macio?

Responda: Um link suave pode ser feito com ln -s; Primeiro você precisa definir a fonte e, em seguida, você precisa definir o destino. (Tenha em mente que você precisa definir os caminhos completos de origem e destino; caso contrário, não funcionará.)

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

enter image description here

Como você pode ver, ele tem um inode diferente e pode ser feito em uma partição diferente.


Questão: Como eu faço o Hard Link?

Responda: Um link Hard pode ser feito com ln; Primeiro você precisa definir a fonte e, em seguida, você precisa definir o destino. (Tenha em mente que você precisa definir o caminho completo da origem e do destino; caso contrário, não funcionará.)

Digamos que eu tenha um script no /script diretório nomeado firefox.

 ls -i # Shows you the inode
 5898242 firefox

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

enter image description here

Como você pode ver, tem o mesmo inode. Se eu excluir o original, o link funcionará e ele atuará como o original.

enter image description here

Acima eu verifico se o link está funcionando e excluo o script original do firefox.


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

Responda : Dependendo do layout da partição de disco, Links Difíceis tem a limitação que eles devem estar na mesma partição (-1 ponto) e só pode vincular a arquivos (-1 ponto) ), mas +1 ponto se o original for excluído, o link funcionará e atuará como o original.

Por outro lado, um link temporário pode apontar para diretórios ou arquivos (ponto +1) e não há limitação de partição (ponto +1), mas (-1 ponto) se a fonte for excluída, o link não funcionará.


32
2018-05-09 00:42





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 informações ao lado do caminho sobre o arquivo para o qual ele aponta.


314
2018-05-18 09:51



Uma coisa que (por próprias palavras) "aponta para o arquivo"  pode ser chamado de ponteiro (é trivialmente quase tautologicamente verdade). Se estivermos investigando, (em geral) a noção de hardlinks pode existir mesmo se um sistema de arquivos não usar inodes. - jfs


"Uma imagem vale mais que mil palavras." Pictorial representation


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

Crie dois arquivos:

$ touch blah1   
$ touch blah2

Digite alguns dados neles:

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

E como esperado:

$cat blah1; cat blah2
Cat
Dog

Vamos criar links hard e soft:

$ 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 programável 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.


fonte: copiando descaradamente de StackOverflow!


294
2017-07-21 07:33



Para ser justo com você - você adicionou a linda imagem no topo ... ah, você copiou isso também! Combinar as duas respostas é realmente muito útil :) - icc97
melhor explicado, em nenhum lugar! - dennisbot
Fiquei olhando para a imagem por 20 segundos e, de repente, percebi. Isso é realmente brilhante. - Mohammed Joraid
btw: Usando hardlinks com git  é uma má ideia, apenas no caso de alguém (frustrado sobre links) maravilhas ... poderia se aplicar a outros sistemas de versionamento também. - Frank Nocke
É um inode para seus hardlinks semelhante a um arquivo armazenado na nuvem para qualquer dispositivo acessa? - Ooker


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 isto, você tem que procurar em cada arquivo e comparar seu número de inode para encontrar o (s) outro (s) nome (s) que possuem o mesmo número de inode.

Você pode dizer quantos nomes um arquivo tem 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.


87
2018-05-18 15:23



If you replace the named file, then the link still contains the same name, and so now it points to the new file - Eu acho que isso não está bem explicado. Você quer dizer que, se eu substituir o arquivo em que tenho um link simbólico, os links contendo o nome permanecerão inalterados. Mas isso só apontaria para o arquivo substituído quando seu nome de arquivo (ou seja, o novo arquivo que substituiu o antigo) é o mesmo que o arquivo substituído (ou seja, antigo que foi substituído pelo novo) um, correto? - Mike
@Mike, sim: o link simbólico aponta para o nome do arquivo original, portanto, substituir esse arquivo significa que o link agora aponta para o novo arquivo. - psusi
Mas só se tiver o mesmo nome correto? O symlink apontaria para banana e eu substituo o arquivo por laranja, então o sy link não pode mais encontrar o arquivo de banana, ou seja, ele não funcionará - Mike
@Mike, o mundo substituir significa que tem o mesmo nome, caso contrário, você está apenas excluindo um arquivo e adicionando outro;) - psusi


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á apagado do disco quando o último link para o seu inode sumir (você rmd ou unlinkd 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.


57
2018-02-29 09:20



Obrigado, isso me diz como eles funcionam, mas o que exatamente o hard link faz? E por que não funciona para diretórios? - ste_kwr
@knittl: tem certeza? Parece que em alguns sistemas de arquivos hardlinks para diretórios são permitidos, mas somente o root pode criá-los. Veja o -d, -F, --directory comuta. E sim, eu ter viu a nota no ln(1) página :) - 0xC0000022L
@kniwor: a maneira mais fácil de descrever hardlinks é "apenas outro nome para o mesmo arquivo (ou seja, dados no disco)". E - pelo menos no meu sistema (s) - ln não pode ser usado para criar hardlinks para diretórios. Existem hardlinks para diretórios, sendo o exemplo mais proeminente . e ... Eu não queria incluir isso na minha resposta original, já que isso só complicaria as coisas. - knittl
@STATUS_ACCESS_DENIED: bem, ok ... mas geralmente não é uma boa ideia. É por isso que escrevi "geralmente" na minha resposta original. Veja também meu comentário anterior para exemplos. - knittl
então, um link físico pode apontar para a mesma pasta / arquivo com nomes diferentes, isto é, ter nomes diferentes que ligam ao mesmo inode? - Charlie Parker


Uma das respostas do outro tópico (agora vinculada do topo do seu post) menciona esta página o 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:

  • Hard-links só permitem o link do mesmo sistema de arquivos. Links simbólicos podem apontar para qualquer caminho.
  • Hard-links (essencialmente) apontam para dados absolutos. Links simbólicos podem apontar para caminhos relativos ../parent.file)
  • Por extensão, se você mover o ponteiro de destino de um hard-link (que, lembre-se, em si é essencialmente apenas um hard-link apontando para um inode), o hard-link ainda funciona. Mover o alvo de um link simbólico normalmente quebraria o symlink.
  • Resolver um link físico seria mais rápido, mas incomensuravelmente. 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. Isso esta certo?


20
2018-05-18 15:10



Eu acho que você está certo, todo arquivo é um nome de caminho para um inode, e um hard link é um nome de caminho adicional para o mesmo inode. Portanto, um link físico não é diferente de um arquivo normal. - enzotib
Estou tentando entender isso ... mas você diz:> "Links simbólicos são arquivos separados (incluindo inode separado e dados) que armazena um caminho do sistema de arquivos para um arquivo. "Um link simbólico realmente tem dados separados? Então é como uma cópia do diretório que ele está ligado, certo? ... e toda vez que algo é escrito no symlink, ele tem que ser escrito duas vezes para o disco? Não faz sentido. - MiniGod
@MiniGod Nenhum link simbólico é um inode para um bloco de dados que armazena um caminho para outro inode (filename). Sim, é confuso com a Matrix, mas uma vez que você consegue, você nunca vai esquecer :) - Oli♦
@Oli eu poderia estar confuso, mas quando você diz: "incluindo inode separado e dados ", você quer dizer que o link simbólico tem dados separados!? - MiniGod
@MiniGod Sim. O Symlink é um inode que aponta para os dados (assim como um arquivo normal) e que os dados são um caminho. É um pouco mais inteligente do que isso - permitir o uso transparente através de links simbólicos - mas isso é essencialmente tudo o que eles são. - Oli♦


Quando usar o Soft Link:

Vincular os sistemas de arquivos: Se você quiser vincular arquivos nos sistemas de arquivos, só poderá usar links simbólicos / suaves.

Links para o diretório: se você deseja 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 hard links. Nos 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 disso em soft link, você perderá os dados se a instância principal do arquivo for excluída.


15
2017-09-06 23:48



Note que há também um link simbólico rápido para o tamanho do caminho até 64 bytes. Ele ainda ocupa um inode, mas não consome o espaço de bloco de 4kb. - syockit


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.

Todo 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.

A partir disso, você pode ver que os dados reais nunca são excluídos, apenas os hard link (s) 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, como explicado anteriormente, simplesmente informam "há um arquivo chamado <targetname> em uma pasta chamada <targetfolder>". Eles apontam para o link físico. Eles não sabem onde estão os dados. O link rígido sabe disso.


7
2018-03-01 11:28





Por um excelente novato-e-ex-Windoze-do utilizador-amigáveis explicação, com bons diagramas e um Perguntas frequentes confira esta página http://www.geekride.com/hard-link-vs-soft-link/. Deles direito autoral restrições me impedem de extrair suas coisas, por isso 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 o meu entendimento para algum ponto indefinido no futuro - assim que as explicações e as man-pages forem profundamente enraizadas e super-técnico com inodes e tudo ...

Apreciar!


3
2018-02-10 16:03





É 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. UMA link rígido é um segundo, terceiro, etc nome mapeado para o mesmo endereço. UMA link simbólico em vez disso, refere-se ao símbolo - o nome - e, portanto, é 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 destino 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.


0
2017-07-03 15:39