Como o título diz, eu gostaria de saber a diferença entre um link físico e um link virtual 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 possa ser preferível a um link simbólico.
symbolic-link
ste_kwr
fonte
fonte
Respostas:
No Linux / Unix, os atalhos são conhecidos como Links
Os links são de dois tipos: links flexíveis (links simbólicos) ou hard links.
Links flexíveis (links simbólicos)
Você pode criar links para arquivos e diretórios e criar links (atalhos) em partições diferentes e com um número de inode diferente do original.
Se a cópia real for excluída, o link não funcionará .
Hard Links
Links físicos são apenas para arquivos; você não pode vincular a um arquivo em uma partição diferente com um número de inode diferente.
Se a cópia real for excluída, o link funcionará , pois acessa os dados subjacentes que a cópia real estava acessando.
Pergunta: Como faço para criar um link virtual?
Resposta: É possível criar um link flexível
ln -s
; primeiro, você precisa definir a fonte e, em seguida, o destino. (Lembre-se de que você precisa definir os caminhos completos da origem e do destino; caso contrário, não funcionará.)Como você pode ver, ele tem um inode diferente e pode ser feito em uma partição diferente.
Pergunta: Como faço para criar o Hard link?
Resposta: Um link físico pode ser feito com
ln
; primeiro, você precisa definir a fonte e, em seguida, o destino. (Lembre-se de que você precisa definir o caminho completo da origem e do destino; caso contrário, não funcionará.)Digamos que eu tenho um script no
/script
diretório chamadofirefox
.Como você pode ver, ele tem o mesmo inode. Se eu excluir o original, o link funcionará, e ele funcionará como o original.
Acima, 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 possa ser preferível a um link simbólico.
Resposta : Dependendo do layout da partição do disco, os Hard Links têm a limitação de que eles devem estar na mesma partição (-1 ponto) e só podem vincular a arquivos (-1 ponto) ), mas +1 ponto se o original for excluído do link funcionará e funciona como o original.
Por outro lado, um link flexível 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á.
fonte
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 apontará 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 os hardlinks, você não tem noção dos arquivos e links originais, todos são iguais (pense nisso como uma referência a um objeto). É um conceito de nível muito baixo.
Por outro lado, um link simbólico está realmente apontando para outro caminho (um nome de arquivo); ele resolve o nome do arquivo cada vez que você o acessa através do link simbólico. 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. Os 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 aponta.
fonte
"Uma imagem vale mais que mil palavras."
E, "Um exemplo vale cem parágrafos ..."
Crie dois arquivos:
Insira alguns dados neles:
E como esperado:
Vamos criar links físicos e virtuais:
Vamos ver o que aconteceu:
Alterar o nome de blah1 não importa:
blah1-hard aponta para o inode, o conteúdo do arquivo - que não foi alterado.
Não foi possível encontrar o conteúdo do arquivo porque o link virtual aponta para o nome que foi alterado e não para o conteúdo.
Da mesma forma, se blah1 for excluído, blah1-hard ainda mantém o conteúdo; se blah2 for excluído, blah2-soft é apenas um link para um arquivo inexistente.
fonte: copiando descaradamente do StackOverflow!
fonte
git
é uma péssima idéia , caso alguém (frustrado por soft links) se pergunte ... também possa se aplicar a outros sistemas de controle de versão.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. Por conter apenas um nome, esse nome não precisa realmente existir ou pode existir em um sistema de arquivos diferente. Se você substituir o arquivo nomeado (alterar seu conteúdo sem afetar o 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 que o primeiro nome de um arquivo. Não há nome "real" vs. nome do link físico; todos os links físicos são nomes igualmente válidos para o arquivo. Por esse motivo, o arquivo ao qual você vincula deve realmente 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ê deve procurar todos os arquivos e comparar o número de inodes para encontrar os outros nomes 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 outros nomes em algum lugar e, inversamente, um arquivo com uma contagem de links de apenas 1 não possui (outros) links físicos.fonte
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. Quer dizer, se eu substituir o arquivo no qual obtive um link simbólico, os links que contêm o nome permanecerão intocados. Mas apenas apontaria para o arquivo substituído quando o nome do arquivo (ou seja, o novo arquivo que substituiu o antigo) for igual ao do arquivo substituído (ou seja, o arquivo antigo que foi substituído pelo novo), correto?Um link físico pode funcionar apenas no mesmo sistema de arquivos; é simplesmente um nome diferente para o mesmo inode (os arquivos são referenciados internamente por inodes). Um arquivo só será excluído do disco quando o último elo à sua inode se foi (você
rm
D ouunlink
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. os links simbólicos podem funcionar em sistemas de arquivos e até apontar para arquivos diferentes, se você, por exemplo, desconectar um disco rígido externo e substituí-lo por outro, que possui um arquivo diferente no mesmo caminho. Um link simbólico pode apontar para arquivos ou diretórios.
fonte
-d, -F, --directory
interruptores. E sim, eu tenho visto a nota naln(1)
página :)ln
não pode ser usado para criar hardlinks para diretórios. Existem hardlinks para diretórios, porém, o exemplo mais importante é.
e..
. Eu não queria incluir isso na minha resposta original, pois isso apenas complicaria as coisas.Uma das respostas do outro tópico (agora linkado no topo da sua postagem) menciona esta página, que eu acho que é uma explicação razoavelmente boa de nível médio. Se você está se perdendo na arte ascii, aqui está a versão tl; dr:
O kernel e os sistemas de arquivos envolvidos traduzem tudo de forma transparente.
Então, com base nisso:
../parent.file
)Eu posso ter me confundido um pouco, mas lendo várias coisas, estou lutando para encontrar a diferença entre um arquivo padrão e um hardlink. A maneira como estou lendo é cada arquivo consiste em um link físico (armazenando o nome do arquivo), vinculado a um inode que aponta para dados físicos.
Adicionar um hardlink apenas fornece ao inode um ponteiro adicional baseado no sistema de arquivos. Isso está certo?
fonte
Quando usar o Soft Link:
Vincular sistemas de arquivos: se você deseja vincular arquivos entre os sistemas de arquivos, poderá usar apenas links simbólicos / soft links.
Links para o diretório: se você deseja vincular os 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: os links físicos requerem uma quantidade muito desprezível de espaço, pois não há novos inodes criados durante a criação de links físicos. Nos links flexíveis, 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, pois 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 outro local no mesmo sistema de arquivos, o link físico ainda funcionará, mas o link flexível falhará.
Redundância: Se você deseja garantir a segurança dos seus dados, deve usar o link físico, pois no link físico, os dados são seguros, até que todos os links para os arquivos sejam excluídos, em vez do link físico, você perderá os dados se a instância principal do arquivo for excluída.
fonte
A confusão surge 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 ficar suficientemente cheio no disco, os dados podem ser substituídos pelos dados de outro arquivo. Até então, os dados do arquivo excluído podem ser recuperados, mas é meio difícil de encontrar sem o link físico.
Os links simbólicos, como explicado anteriormente, simplesmente informam "há um arquivo nomeado
<targetname>
em uma pasta denominada<targetfolder>
". Eles apontam para o link físico. Eles não sabem onde estão os dados. O link rígido sabe disso.fonte
É muito simples. Os arquivos (e diretórios!) São armazenados nos endereços do dispositivo de bloco (HDD ou o que for). Normalmente você tem um único nome mapeado para um endereço, e é assim que você obtém seu arquivo. Um link físico é um nome de segundo, terceiro etc. mapeado para o mesmo endereço. Um link simbólico se refere 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 do destino como o nome do arquivo (mais ou menos), de modo que links simbólicos relativos são possíveis, mas são inúteis. O nome do destino não é usado acima do nível do sistema de arquivos, exceto se for consultado explicitamente no código do espaço do usuário.
fonte