Qual é a diferença entre um link simbólico e um link físico?
768
Recentemente me perguntaram isso durante uma entrevista de emprego. Fui sincero e disse que sabia como um link simbólico se comporta e como criar um, mas não entendo o uso de um link físico e como ele difere de um simbólico.
sobre 'não entendo o uso de um link físico', ele pode ser usado em sistemas de construção que fazem muitas cópias de binários. Criar links físicos em vez de cópias reais acelera as coisas. O MSBuild 4.0 suporta isso.
O unix.stackexchange tem uma boa lista de pontos de bala ... muito útil, porque apresenta todas as restrições de forma muito concisa e é fácil de ler. (muitos desses pontos de bala cobrir casos de ponta / advertências de que apenas são mencionados nos comentários desta pergunta ... ou não são mencionados em tudo)
Trevor Boyd Smith
Respostas:
781
Sob o sistema de arquivos, os arquivos são representados por inodes. (Ou são vários inodes? Não tenho certeza.)
Um arquivo no sistema de arquivos é basicamente um link para um inode.
Um link físico, então, apenas cria outro arquivo com um link para o mesmo inode subjacente.
Quando você exclui um arquivo, ele remove um link para o inode subjacente. O inode é excluído apenas (ou excluído / sobregravável) quando todos os links para o inode foram excluídos.
Um link simbólico é um link para outro nome no sistema de arquivos.
Depois que um link físico é feito, o link é para o inode. Excluir, renomear ou mover o arquivo original não afetará o link físico, pois ele é vinculado ao inode subjacente. Quaisquer alterações nos dados no inode são refletidas em todos os arquivos que se referem a esse inode.
Nota: Links físicos são válidos apenas no mesmo sistema de arquivos. Links simbólicos podem abranger sistemas de arquivos, pois são simplesmente o nome de outro arquivo.
Tenho certeza de que os nós-i dependem da variante específica do sistema operacional; no entanto, acredito que geralmente é um único nó-i. O nó i possui informações sobre o arquivo e informações sobre onde os dados estão armazenados no disco. Arquivos grandes terão ponteiros indiretos para tabelas adicionais.
terson 9/10/08
76
Você pode querer adicionar o recurso útil de que links simbólicos podem cruzar sistemas de arquivos, links físicos não (eles devem se referir a um arquivo no mesmo sistema de arquivos).
Eu também escrevi um blog em que, depois de alguma leitura e experimentos csharpbsharp.tumblr.com
Adnan Bhatti
1
@zen: Você pode desmontar / remontar um sistema de arquivos sempre que ele não estiver sendo usado. Para a partição raiz, isso é um pouco complicado, mas pode ser feito (não recomendado). Para fazer isso pela raiz, geralmente é melhor inicializar um CD de recuperação, modifique primeiro as montagens e reinicie. Mas você deve fazer esse tipo de pergunta sobre superusuário.
Martin York
464
Alguma boa intuição que possa ajudar, usando qualquer console Linux (ish).
Crie dois arquivos:
$ touch foo; touch bar
Insira alguns dados neles:
$ echo "Cat" > foo
$ echo "Dog" > bar
(Na verdade, eu poderia ter usado o eco em primeiro lugar, pois ele cria os arquivos se eles não existirem ... mas não importa.)
E como esperado:
$cat foo; cat bar
Cat
Dog
Vamos criar links físicos e virtuais:
$ ln foo foo-hard
$ ln -s bar bar-soft
Vamos ver o que aconteceu:
$ ls -l
foo
foo-hard
bar
bar-soft -> bar
Alterar o nome de foo não importa:
$ mv foo foo-new
$ cat foo-hard
Cat
pontos difíceis para o inode, o conteúdo do arquivo - isso não foi alterado.
$ mv bar bar-new
$ ls bar-soft
bar-soft
$ cat bar-soft
cat: bar-soft: No such file or directory
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 foofor excluído, foo-hardainda mantém o conteúdo; se barfor excluído, bar-softé apenas um link para um arquivo inexistente.
isso implica que um "arquivo" e um "link físico" são os mesmos, ambos apontando para um inode? ao excluir um arquivo ou link físico, o conteúdo ainda existe enquanto alguém ainda está apontando para o inode, certo?
Daniel W.
1
@DanFromGermany Correct. O conteúdo está acessível desde que pelo menos um link físico (ou seja, arquivo) esteja apontando para ele.
Adam Matan
6
touch blah1; touch blah2pode ser reduzido paratouch blah1 blah2
Dmitri Zaitsev 27/04
11
@DmitriZaitsev True, mas será menos legível para iniciantes na IMO.
Adam Matan
8
Penso que esta é a resposta mais compreensível em relação a muitas respostas que li. Uma amostra é melhor que um monte de texto explicativo.
97818 Scott Chu
435
Como diz o ditado, uma imagem vale mais que mil palavras. Aqui está como eu o visualizo:
Aqui está como chegamos a essa imagem:
Crie um nome myfile.txtno sistema de arquivos que aponte para um novo inode (que contém os metadados para o arquivo e aponte para os blocos de dados que contêm seu conteúdo, ou seja, o texto "Olá, Mundo!":
$ echo 'Hello, World!' > myfile.txt
Crie um link físico my-hard-linkpara o arquivomyfile.txt , o que significa "crie um arquivo que aponte para o mesmo inode que myfile.txtaponta para":
$ ln myfile.txt my-hard-link
Crie um link my-soft-linkpara o arquivo myfile.txt, o que significa "criar um arquivo que aponte para o arquivo myfile.txt":
$ ln -s myfile.txt my-soft-link
Veja o que agora acontecerá se myfile.txtfor excluído (ou movido): my-hard-linkainda aponta para o mesmo conteúdo e, portanto, não é afetado, enquanto my-soft-linkagora aponta para nada. Outras respostas discutem os prós / contras de cada um.
@ThunderWiring Por "point", quero dizer o que o link faz referência. No caso de um link físico, ele faz referência direta a um inode (ou seja, o mesmo inode mencionado por myfile.txt). Para o link macio, de referência não é o inode (que contém os dados), mas sim de referência é o caminho do sistema de arquivo para myfile.txt(por exemplo /home/Documents/myfile.txt)
akivajgordon
4
Eu realmente gosto da sua resposta visual @akivajgordon - realmente me ajudou a entender melhor as diferenças!
Wmock 17/07/16
7
Dez mil palavras!
precisa saber é o seguinte
13
Talvez eu seja lenta, mas sua foto acabou de esclarecer 20 anos de mistério em cerca de 2 segundos.
jdk1.0
3
Resposta mais útil, estou louco por isso estar enterrado tão profundamente neste post. Eu daria a você cem pontos de internet, mas, infelizmente, só posso lhe dar um.
Dagrooms
71
Links físicos são úteis quando o arquivo original está sendo movido. Por exemplo, movendo um arquivo de / bin para / usr / bin ou para / usr / local / bin. Qualquer link simbólico para o arquivo em / bin seria quebrado por isso, mas um link físico, sendo um link direto para o inode do arquivo, não se importaria.
Os links físicos podem ocupar menos espaço em disco, pois ocupam apenas uma entrada de diretório, enquanto um link simbólico precisa de seu próprio inode para armazenar o nome para o qual aponta.
Os links físicos também levam menos tempo para serem resolvidos - os links simbólicos podem apontar para outros links simbólicos que estão em diretórios com links simbólicos. E alguns deles podem estar no NFS ou em outros sistemas de arquivos de alta latência e, portanto, podem resultar na resolução do tráfego da rede. Os links físicos, estando sempre no mesmo sistema de arquivos, são sempre resolvidos em uma única pesquisa e nunca envolvem latência de rede (se for um link físico em um sistema de arquivos NFS, o servidor NFS fará a resolução e ficará invisível para o sistema do cliente). Às vezes isso é importante. Não é para mim, mas posso imaginar sistemas de alto desempenho onde isso possa ser importante.
Também acho que coisas como mmap (2) e até open (2) usam a mesma funcionalidade dos hardlinks para manter o inode de um arquivo ativo, de modo que, mesmo que o arquivo seja desvinculado (2), o inode permanece para permitir o acesso contínuo ao processo, e somente quando o processo é fechado, o arquivo desaparece. Isso permite que arquivos temporários muito mais seguros (se você conseguir que o aberto e o desvincular ocorram atomicamente, que pode haver uma API POSIX para a qual eu não estou me lembrando, então você realmente tem um arquivo temporário seguro) onde você pode ler / gravar seus dados sem que ninguém possa acessá-los. Bem, isso era verdade antes / proc deu a todos a capacidade de olhar para os descritores de arquivos, mas isso é outra história.
Por falar nisso, a recuperação de um arquivo aberto no processo A, mas desvinculado do sistema de arquivos, gira em torno do uso de hardlinks para recriar os links do inode, para que o arquivo não desapareça quando o processo que o abre o fecha ou desaparece.
suave ou simbólico é mais um atalho para o arquivo original .... se você excluir o original, o atalho falhará e se você excluir apenas o atalho, nada acontecerá com o original.
Sintaxe do link dinâmico :ln -s Pathof_Target_file link
Resultado :link -> ./Target_file
Prova:readlink link
também na ls -l linksaída, você verá a primeira letra lrwxrwxrwxcomo l, que é uma indicação de que o arquivo é um link direto.
Excluindo o link:unlink link
Nota: Se desejar, o seu softlink poderá funcionar mesmo depois de movê-lo para outro lugar do diretório atual. Certifique-se de fornecer o caminho absoluto e não o relativo, ao criar um link flexível. ie (começando em / root / user / Target_file e não ./Target_file)
Hard Link:
O link físico é mais uma cópia espelhada ou vários caminhos para o mesmo arquivo. Faça algo no arquivo1 e ele aparecerá no arquivo 2. A exclusão de um ainda mantém o outro ok.
O inode (ou arquivo) é excluído apenas quando todos os links (físicos) ou todos os caminhos para o inode (mesmo arquivo) foram excluídos.
Depois que um link físico é criado, o link possui o inode do arquivo original. A exclusão da renomeação ou a movimentação do arquivo original não afetará o link físico, pois ele é vinculado ao inode subjacente. Quaisquer alterações nos dados no inode são refletidas em todos os arquivos que se referem a esse inode.
Sintaxe do Hard Link :ln Target_file link
Resultado: Um arquivo com link de nome será criado com o mesmo número de inode que o Targetfile.
Prova:ls -i link Target_file (verifique seus inodes)
Excluindo o link:rm -f link (exclua o link como um arquivo normal)
Nota : Links simbólicos podem abranger sistemas de arquivos, pois são simplesmente o nome de outro arquivo. Considerando que os links físicos são válidos apenas no mesmo sistema de arquivos.
Links simbólicos têm alguns recursos que estão faltando links físicos:
Ponto de ligação física para o conteúdo do arquivo. enquanto o link suave aponta para o nome do arquivo.
enquanto o tamanho do link físico é o tamanho do conteúdo, enquanto o link flexível possui o tamanho do nome do arquivo.
Os links físicos compartilham o mesmo inode. Links flexíveis não.
Links físicos não podem cruzar sistemas de arquivos. Soft links fazem.
você sabe imediatamente onde um link simbólico aponta para os links físicos, é necessário explorar todo o sistema de arquivos para encontrar arquivos que compartilham o mesmo inode.
# find / -inum 517333
/home/bobbin/sync.sh
/root/synchro
links físicos não podem apontar para diretórios.
Os links físicos têm duas limitações:
Os diretórios não podem ter vínculos físicos. O Linux não permite que isso mantenha a estrutura em árvore acíclica dos diretórios.
Um link físico não pode ser criado nos sistemas de arquivos. Ambos os arquivos devem estar no mesmo sistema de arquivos, porque sistemas de arquivos diferentes têm tabelas de inodes independentes diferentes (dois arquivos em sistemas de arquivos diferentes, mas com o mesmo número de inode serão diferentes).
"enquanto o tamanho do link físico é o tamanho do conteúdo, enquanto o link flexível possui o tamanho do nome do arquivo." Apenas para esclarecer, a criação de outro link físico afeta apenas o espaço livre em alguns bytes.
Ingo
34
Uma maneira simples de ver a diferença entre um link físico e um link simbólico é através de um exemplo simples. Um link direto para um arquivo apontará para o local em que o arquivo está armazenado ou o inode desse arquivo. Um link simbólico apontará para o próprio arquivo real.
Portanto, se tivermos um arquivo chamado "a" e criarmos um link físico "b" e um link simbólico "c", todos eles se referem ao arquivo "a":
echo "111" > a
ln a b
ln -s a c
A saída de "a", "b" e "c" será:
cat a --> 111
cat b --> 111
cat c --> 111
Agora vamos remover o arquivo "a" e ver o que acontece com a saída de "a", "b" e "c":
rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory
Então o que aconteceu?
Como o arquivo "c" aponta para o próprio arquivo "a", se o arquivo "a" for excluído, o arquivo "c" não terá nada para apontar; na verdade, ele também será excluído.
No entanto, o arquivo "b" aponta para o local de armazenamento ou o inode do arquivo "a". Portanto, se o arquivo "a" for excluído, ele não apontará mais para o inode, mas como o arquivo "b" o fará, o inode continuará armazenando qualquer conteúdo pertencente a "a" até que não haja mais links físicos para ele.
Pode ser útil salientar que, um arquivo é um objeto muito abstrato e, com todas as coisas abstratas, a real intenção das implementações de alto nível pode ficar aquém da explicação adequada sem correr o risco de explodir abstrações.
precisa saber é o seguinte
28
Links simbólicos vinculados a um nome de caminho. Isso pode estar em qualquer lugar na árvore de arquivos do sistema e nem precisa existir quando o link é criado. O caminho de destino pode ser relativo ou absoluto.
Links físicos são ponteiros adicionais para um inode, o que significa que eles podem existir apenas no mesmo volume que o destino. Links físicos adicionais para um arquivo são indistinguíveis do nome "original" usado para fazer referência a um arquivo.
Além disso, quando você remove o arquivo ao qual vincula, um link simbólico é quebrado, um link físico permanece válido, porque "mantém" o arquivo no sistema de arquivos.
Em teoria (e em alguns casos até na prática), os links físicos também podem apontar para diretórios (de fato "." É um link direto para o diretório atual e ".." é um link físico para o diretório pai). Mas eles podem ser perigosos, então a maioria dos UNIX não os permite (ou exige que você tome medidas especiais para executá-lo). Apple usa-los para a sua implementação tempo de máquina por exemplo: earthlingsoft.net/ssp/blog/2008/03/x5_time_machine
Joachim Sauer
3
Você está apontando para um link para um artigo ... isso faz de você um link simbólico?
Ian Campbell
@JoachimSauer Você acha que o novo sistema de arquivos da Apple eliminará a necessidade do Time Machine usar links físicos para diretórios?
Cjm
Achei a explicação da wikipedia significativamente mais curta e mais concreta do que as explicações nas respostas melhor classificadas.
Lakesare
9
Links físicos são muito úteis ao fazer backups incrementais. Veja rsnapshot , por exemplo. A idéia é copiar usando links físicos:
copiar número de backup n para n + 1
copiar backup n - 1 para n
...
copiar backup 0 para backup 1
atualize o backup 0 com todos os arquivos alterados.
O novo backup não ocupará espaço extra além das alterações que você fez, pois todos os backups incrementais apontarão para o mesmo conjunto de inodes para arquivos que não foram alterados.
Acho que sua foto do link não está correta. Ponto: o inode do link não deve apontar para o inode do arquivo original. Porque se você mudar o nome do arquivo original, o soft link relacionado está morto
percy507
@ percy507 sim, você está certo - mas ainda acho uma explicação muito agradável e intuitiva. Basta imaginar que a seta entre inodes não está lá ...
Michael Litvin
5
Acrescento à pergunta de Nick: quando os links físicos são úteis ou necessários? O único aplicativo que me vem à cabeça, no qual links simbólicos não funcionariam, é fornecer uma cópia de um arquivo do sistema em um ambiente chroot.
Sistema distribuído com pontos de montagem em diferentes locais em diferentes sistemas. Obviamente, isso poderia ser projetado para fora do sistema sendo consistente.
Um link simbólico é um objeto do sistema de arquivos que aponta para outro objeto do sistema de arquivos. O objeto que está sendo apontado é chamado de destino.
Links simbólicos são transparentes para os usuários; os links aparecem como arquivos ou diretórios normais e podem ser tratados pelo usuário ou aplicativo exatamente da mesma maneira.
Links simbólicos são projetados para ajudar na migração e compatibilidade de aplicativos com sistemas operacionais UNIX. A Microsoft implementou seus links simbólicos para funcionar como os links UNIX.
Links simbólicos podem ser links absolutos ou relativos. Links absolutos são links que especificam cada parte do nome do caminho; links relativos são determinados em relação a onde os especificadores de link relativo estão em um caminho especificado
Um exemplo de link simbólico absoluto
X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"
Um exemplo de links simbólicos relativos
X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"
Um link físico é a representação do sistema de arquivos de um arquivo pelo qual mais de um caminho faz referência a um único arquivo no mesmo volume .
Para criar um link físico no Windows, navegue até o local em que o link deve ser criado e insira este comando:
mklink /H Link_name target_path
Observe que você pode excluir links físicos de qualquer ordem, independentemente da ordem em que foram criados. Além disso, links físicos não podem ser criados quando
referências estão em diferentes unidades locais
As referências incluem unidade de rede. Em outras palavras, uma das referências é uma unidade de rede
O link físico a ser criado está no mesmo caminho que o destino
O NTFS suporta outro tipo de link chamado junção. O MSDN define da seguinte maneira:
Uma junção (também chamada de link virtual) difere de um link físico, pois os objetos de armazenamento aos quais faz referência são diretórios separados, e uma junção pode vincular diretórios localizados em diferentes volumes locais no mesmo computador . Caso contrário, as junções operam de forma idêntica aos links físicos.
As partes em negrito na seção de link físico e seção de junção mostram a diferença básica entre as duas.
Comando para criar uma junção no Windows, navegue até onde o link deve ser criado e digite:
O desempenho de leitura de links físicos é melhor que os links simbólicos (micro-desempenho)
Links simbólicos podem ser copiados, controlados por versão, etc. Em outras palavras, eles são um arquivo real. Por outro lado, um link físico é algo em um nível um pouco mais baixo e você verá que, comparado aos links simbólicos, há menos ferramentas que fornecem meios para trabalhar com os links físicos como links físicos e não como arquivos normais
Simplesmente, Hard link: basta adicionar um novo nome a um arquivo, ou seja, um arquivo pode ter muitos nomes ao mesmo tempo, todos os nomes são iguais, ninguém prefere, Hard link não significa copiar todo o conteúdo de arquivo e criar novo arquivo não é isso, basta criar um nome alternativo a ser conhecido.
Link simbólico (link simbólico): é um ponteiro de arquivo para outro arquivo, se o link simbólico apontar para um arquivo existente que será excluído posteriormente, o link simbólico continuará apontando para o mesmo nome de arquivo, mesmo que o nome não nomeie mais nenhum arquivo.
O que você considera um "arquivo" comum é na verdade duas coisas distintas: os dados de um arquivo e uma entrada de diretório. Ao criar um link físico para um arquivo, você realmente cria uma segunda entrada de diretório que se refere aos mesmos dados. As duas entradas de diretório têm exatamente a mesma funcionalidade; cada um pode ser usado para abrir o arquivo e lê-lo. Então você realmente não tem "um arquivo mais um link físico", você tem "dados de arquivo com duas entradas de diretório". O que você pensa como excluir um arquivo na verdade exclui uma entrada de diretório e, quando a última entrada de diretório para os dados é excluída, os próprios dados também são excluídos. Para arquivos comuns que possuem apenas uma entrada de diretório, a exclusão da entrada de diretório excluirá os dados como sempre. (Enquanto um arquivo é aberto, o sistema operacional cria um link temporário para o arquivo,
Como exemplo, crie um arquivo A.txt, um link físico B.txt e exclua A.txt. Quando você criou o A.txt, alguns dados foram criados e uma entrada de diretório A.txt. Quando você criou o link físico, outra entrada de diretório B.txt foi criada, apontando exatamente os mesmos dados. Quando você exclui A.txt, ainda possui todos os dados e uma única entrada de diretório B.txt, exatamente como se você tivesse criado um arquivo B.txt em primeiro lugar.
Um link simples é apenas um arquivo (quase) comum, exceto pelo fato de não conter dados, mas o caminho de outra entrada de diretório. Se você excluir o arquivo ao qual o link virtual se refere, o link virtual conterá um caminho que não aponta mais para uma entrada de diretório; está quebrado. Se você excluir o link virtual, é como excluir qualquer outro arquivo, o arquivo para o qual ele aponta não é afetado.
Como os hardlinks podem ser criados no mesmo sistema de arquivos, podemos pesquisar todos os hardlinks sem a -Lopção usada (com-xdev opção) no mesmo sistema de arquivos / ponto de montagem. Ele salva a pesquisa desnecessária em diferentes pontos de montagem.
Portanto, pesquisar no hardlink é um pouco mais rápido do que pesquisar nos softlinks (retifique se estou errado ou não estou claro).
Links simbólicos atribuem outro nome a um arquivo, de maneira semelhante aos links físicos. Mas um arquivo pode ser excluído mesmo se houver links simbólicos restantes.
Acabei de encontrar uma maneira fácil de entender os links físicos em um cenário comum, a instalação de software.
Um dia, baixei um software para a pasta Downloadspara instalação. Depois disso sudo make install, alguns executáveis foram cpeditados na pasta bin local. Aqui, cpcria um link físico . Fiquei feliz com o software, mas logo percebi que Downloadsnão é um bom lugar a longo prazo. Então mveditei a pasta do software para o sourcediretório. Bem, ainda posso executar o software como antes, sem me preocupar com nada relacionado ao link de destino, como no Windows. Isso significa que o hard link encontra o inode diretamente e outros arquivos.
Nesta resposta, quando digo um arquivo, quero dizer o local na memória
Todos os dados salvos são armazenados na memória usando uma estrutura de dados chamada inodes. Cada inode possui um número de inod. O número do inode é usado para acessar o inode. Todos os links físicos para um arquivo podem ter nomes diferentes, mas compartilhar o mesmo número de inode. Como todos os links físicos têm o mesmo número de código (que acessam o mesmo código), todos apontam para a mesma memória física.
Um link simbólico é um tipo especial de arquivo. Como também é um arquivo, ele terá um nome de arquivo e um número de inode. Como dito acima, o número do inode acessa um inode que aponta para dados. Agora, o que torna um link simbólico especial é que os inodenumbers nos links simbólicos acessam os inodes que apontam para "um caminho" para outro arquivo. Mais especificamente, o número do inode no link simbólico acede aos inodes que apontam para outro link físico.
quando estamos movendo, copiando e excluindo um arquivo na GUI, estamos jogando com os hardlinks do arquivo e não com a memória física. quando excluímos um arquivo, estamos excluindo o hardlink do arquivo. não estamos eliminando a memória física.Se todos os hardlinks do arquivo forem excluídos, não será possível acessar os dados armazenados, embora ainda possam estar presentes na memória
Respostas:
Sob o sistema de arquivos, os arquivos são representados por inodes. (Ou são vários inodes? Não tenho certeza.)
Um arquivo no sistema de arquivos é basicamente um link para um inode.
Um link físico, então, apenas cria outro arquivo com um link para o mesmo inode subjacente.
Quando você exclui um arquivo, ele remove um link para o inode subjacente. O inode é excluído apenas (ou excluído / sobregravável) quando todos os links para o inode foram excluídos.
Um link simbólico é um link para outro nome no sistema de arquivos.
Depois que um link físico é feito, o link é para o inode. Excluir, renomear ou mover o arquivo original não afetará o link físico, pois ele é vinculado ao inode subjacente. Quaisquer alterações nos dados no inode são refletidas em todos os arquivos que se referem a esse inode.
Nota: Links físicos são válidos apenas no mesmo sistema de arquivos. Links simbólicos podem abranger sistemas de arquivos, pois são simplesmente o nome de outro arquivo.
fonte
Alguma boa intuição que possa ajudar, usando qualquer console Linux (ish).
Crie dois arquivos:
Insira alguns dados neles:
(Na verdade, eu poderia ter usado o eco em primeiro lugar, pois ele cria os arquivos se eles não existirem ... mas não importa.)
E como esperado:
Vamos criar links físicos e virtuais:
Vamos ver o que aconteceu:
Alterar o nome de foo não importa:
pontos difíceis para o inode, o conteúdo do arquivo - isso 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
foo
for excluído,foo-hard
ainda mantém o conteúdo; sebar
for excluído,bar-soft
é apenas um link para um arquivo inexistente.fonte
touch blah1; touch blah2
pode ser reduzido paratouch blah1 blah2
Como diz o ditado, uma imagem vale mais que mil palavras. Aqui está como eu o visualizo:
Aqui está como chegamos a essa imagem:
Crie um nome
myfile.txt
no sistema de arquivos que aponte para um novo inode (que contém os metadados para o arquivo e aponte para os blocos de dados que contêm seu conteúdo, ou seja, o texto "Olá, Mundo!":Crie um link físico
my-hard-link
para o arquivomyfile.txt
, o que significa "crie um arquivo que aponte para o mesmo inode quemyfile.txt
aponta para":Crie um link
my-soft-link
para o arquivomyfile.txt
, o que significa "criar um arquivo que aponte para o arquivomyfile.txt
":Veja o que agora acontecerá se
myfile.txt
for excluído (ou movido):my-hard-link
ainda aponta para o mesmo conteúdo e, portanto, não é afetado, enquantomy-soft-link
agora aponta para nada. Outras respostas discutem os prós / contras de cada um.fonte
myfile.txt
). Para o link macio, de referência não é o inode (que contém os dados), mas sim de referência é o caminho do sistema de arquivo paramyfile.txt
(por exemplo/home/Documents/myfile.txt
)Links físicos são úteis quando o arquivo original está sendo movido. Por exemplo, movendo um arquivo de / bin para / usr / bin ou para / usr / local / bin. Qualquer link simbólico para o arquivo em / bin seria quebrado por isso, mas um link físico, sendo um link direto para o inode do arquivo, não se importaria.
Os links físicos podem ocupar menos espaço em disco, pois ocupam apenas uma entrada de diretório, enquanto um link simbólico precisa de seu próprio inode para armazenar o nome para o qual aponta.
Os links físicos também levam menos tempo para serem resolvidos - os links simbólicos podem apontar para outros links simbólicos que estão em diretórios com links simbólicos. E alguns deles podem estar no NFS ou em outros sistemas de arquivos de alta latência e, portanto, podem resultar na resolução do tráfego da rede. Os links físicos, estando sempre no mesmo sistema de arquivos, são sempre resolvidos em uma única pesquisa e nunca envolvem latência de rede (se for um link físico em um sistema de arquivos NFS, o servidor NFS fará a resolução e ficará invisível para o sistema do cliente). Às vezes isso é importante. Não é para mim, mas posso imaginar sistemas de alto desempenho onde isso possa ser importante.
Também acho que coisas como mmap (2) e até open (2) usam a mesma funcionalidade dos hardlinks para manter o inode de um arquivo ativo, de modo que, mesmo que o arquivo seja desvinculado (2), o inode permanece para permitir o acesso contínuo ao processo, e somente quando o processo é fechado, o arquivo desaparece. Isso permite que arquivos temporários muito mais seguros (se você conseguir que o aberto e o desvincular ocorram atomicamente, que pode haver uma API POSIX para a qual eu não estou me lembrando, então você realmente tem um arquivo temporário seguro) onde você pode ler / gravar seus dados sem que ninguém possa acessá-los. Bem, isso era verdade antes / proc deu a todos a capacidade de olhar para os descritores de arquivos, mas isso é outra história.
Por falar nisso, a recuperação de um arquivo aberto no processo A, mas desvinculado do sistema de arquivos, gira em torno do uso de hardlinks para recriar os links do inode, para que o arquivo não desapareça quando o processo que o abre o fecha ou desaparece.
fonte
Soft Link :
suave ou simbólico é mais um atalho para o arquivo original .... se você excluir o original, o atalho falhará e se você excluir apenas o atalho, nada acontecerá com o original.
Sintaxe do link dinâmico :
ln -s Pathof_Target_file link
Resultado :
link -> ./Target_file
Prova:
readlink link
também nals -l link
saída, você verá a primeira letralrwxrwxrwx
como l, que é uma indicação de que o arquivo é um link direto.Excluindo o link:
unlink link
Nota: Se desejar, o seu softlink poderá funcionar mesmo depois de movê-lo para outro lugar do diretório atual. Certifique-se de fornecer o caminho absoluto e não o relativo, ao criar um link flexível. ie (começando em / root / user / Target_file e não ./Target_file)
Hard Link:
O link físico é mais uma cópia espelhada ou vários caminhos para o mesmo arquivo. Faça algo no arquivo1 e ele aparecerá no arquivo 2. A exclusão de um ainda mantém o outro ok.
O inode (ou arquivo) é excluído apenas quando todos os links (físicos) ou todos os caminhos para o inode (mesmo arquivo) foram excluídos.
Depois que um link físico é criado, o link possui o inode do arquivo original. A exclusão da renomeação ou a movimentação do arquivo original não afetará o link físico, pois ele é vinculado ao inode subjacente. Quaisquer alterações nos dados no inode são refletidas em todos os arquivos que se referem a esse inode.
Sintaxe do Hard Link :
ln Target_file link
Resultado: Um arquivo com link de nome será criado com o mesmo número de inode que o Targetfile.
Prova:
ls -i link Target_file
(verifique seus inodes)Excluindo o link:
rm -f link
(exclua o link como um arquivo normal)Nota : Links simbólicos podem abranger sistemas de arquivos, pois são simplesmente o nome de outro arquivo. Considerando que os links físicos são válidos apenas no mesmo sistema de arquivos.
Links simbólicos têm alguns recursos que estão faltando links físicos:
você sabe imediatamente onde um link simbólico aponta para os links físicos, é necessário explorar todo o sistema de arquivos para encontrar arquivos que compartilham o mesmo inode.
# find / -inum 517333
links físicos não podem apontar para diretórios.
Os links físicos têm duas limitações:
fonte
Uma maneira simples de ver a diferença entre um link físico e um link simbólico é através de um exemplo simples. Um link direto para um arquivo apontará para o local em que o arquivo está armazenado ou o inode desse arquivo. Um link simbólico apontará para o próprio arquivo real.
Portanto, se tivermos um arquivo chamado "a" e criarmos um link físico "b" e um link simbólico "c", todos eles se referem ao arquivo "a":
A saída de "a", "b" e "c" será:
Agora vamos remover o arquivo "a" e ver o que acontece com a saída de "a", "b" e "c":
Então o que aconteceu?
Como o arquivo "c" aponta para o próprio arquivo "a", se o arquivo "a" for excluído, o arquivo "c" não terá nada para apontar; na verdade, ele também será excluído.
No entanto, o arquivo "b" aponta para o local de armazenamento ou o inode do arquivo "a". Portanto, se o arquivo "a" for excluído, ele não apontará mais para o inode, mas como o arquivo "b" o fará, o inode continuará armazenando qualquer conteúdo pertencente a "a" até que não haja mais links físicos para ele.
fonte
Links simbólicos vinculados a um nome de caminho. Isso pode estar em qualquer lugar na árvore de arquivos do sistema e nem precisa existir quando o link é criado. O caminho de destino pode ser relativo ou absoluto.
Links físicos são ponteiros adicionais para um inode, o que significa que eles podem existir apenas no mesmo volume que o destino. Links físicos adicionais para um arquivo são indistinguíveis do nome "original" usado para fazer referência a um arquivo.
fonte
Eu indicaria a Wikipedia:
Alguns pontos:
fonte
Links físicos são muito úteis ao fazer backups incrementais. Veja rsnapshot , por exemplo. A idéia é copiar usando links físicos:
O novo backup não ocupará espaço extra além das alterações que você fez, pois todos os backups incrementais apontarão para o mesmo conjunto de inodes para arquivos que não foram alterados.
fonte
Hard link Vs Soft link pode ser facilmente explicado por esta imagem.
fonte
Acrescento à pergunta de Nick: quando os links físicos são úteis ou necessários? O único aplicativo que me vem à cabeça, no qual links simbólicos não funcionariam, é fornecer uma cópia de um arquivo do sistema em um ambiente chroot.
fonte
No MSDN ,
Link simbólico
Um exemplo de link simbólico absoluto
Um exemplo de links simbólicos relativos
Link físico
Para criar um link físico no Windows, navegue até o local em que o link deve ser criado e insira este comando:
Observe que você pode excluir links físicos de qualquer ordem, independentemente da ordem em que foram criados. Além disso, links físicos não podem ser criados quando
Junção
O NTFS suporta outro tipo de link chamado junção. O MSDN define da seguinte maneira:
As partes em negrito na seção de link físico e seção de junção mostram a diferença básica entre as duas.
Comando para criar uma junção no Windows, navegue até onde o link deve ser criado e digite:
fonte
Além disso:
fonte
Simplesmente, Hard link: basta adicionar um novo nome a um arquivo, ou seja, um arquivo pode ter muitos nomes ao mesmo tempo, todos os nomes são iguais, ninguém prefere, Hard link não significa copiar todo o conteúdo de arquivo e criar novo arquivo não é isso, basta criar um nome alternativo a ser conhecido.
Link simbólico (link simbólico): é um ponteiro de arquivo para outro arquivo, se o link simbólico apontar para um arquivo existente que será excluído posteriormente, o link simbólico continuará apontando para o mesmo nome de arquivo, mesmo que o nome não nomeie mais nenhum arquivo.
fonte
O que você considera um "arquivo" comum é na verdade duas coisas distintas: os dados de um arquivo e uma entrada de diretório. Ao criar um link físico para um arquivo, você realmente cria uma segunda entrada de diretório que se refere aos mesmos dados. As duas entradas de diretório têm exatamente a mesma funcionalidade; cada um pode ser usado para abrir o arquivo e lê-lo. Então você realmente não tem "um arquivo mais um link físico", você tem "dados de arquivo com duas entradas de diretório". O que você pensa como excluir um arquivo na verdade exclui uma entrada de diretório e, quando a última entrada de diretório para os dados é excluída, os próprios dados também são excluídos. Para arquivos comuns que possuem apenas uma entrada de diretório, a exclusão da entrada de diretório excluirá os dados como sempre. (Enquanto um arquivo é aberto, o sistema operacional cria um link temporário para o arquivo,
Como exemplo, crie um arquivo A.txt, um link físico B.txt e exclua A.txt. Quando você criou o A.txt, alguns dados foram criados e uma entrada de diretório A.txt. Quando você criou o link físico, outra entrada de diretório B.txt foi criada, apontando exatamente os mesmos dados. Quando você exclui A.txt, ainda possui todos os dados e uma única entrada de diretório B.txt, exatamente como se você tivesse criado um arquivo B.txt em primeiro lugar.
Um link simples é apenas um arquivo (quase) comum, exceto pelo fato de não conter dados, mas o caminho de outra entrada de diretório. Se você excluir o arquivo ao qual o link virtual se refere, o link virtual conterá um caminho que não aponta mais para uma entrada de diretório; está quebrado. Se você excluir o link virtual, é como excluir qualquer outro arquivo, o arquivo para o qual ele aponta não é afetado.
fonte
Uma entrada de diretório é um link para uma estrutura:
o ino é o número de inode, o nome é o nome do arquivo, a estrutura do inode pode ser como:
por exemplo, você cria um arquivo / 1, a entrada do diretório pode ser como:
a estrutura do inode pode ser como:
então você cria um link físico (pode ser / 100), a entrada do diretório pode ser como:
a estrutura do inode pode ser como:
então você cria um link simbólico (pode ser / 200) para o arquivo 1, a entrada do diretório pode ser como:
a estrutura do inode pode ser como:
fonte
Adicionando a todas as respostas acima, a diferença em encontrar o arquivo de hardlink e softlink pode ser entendida como abaixo:
Eu tenho um arquivo
f6
no meu diretório atual, bem como um diretório chamadot2
.Arquivo nomeado
f1
e./t2/f2
são links simbólicos paraf6
.Arquivo nomeado
f7
e./t2/f8
são links físicos def6
.Para encontrar links suaves e físicos, podemos usar:
Para encontrar apenas o hardlink, podemos usar:
Como os hardlinks podem ser criados no mesmo sistema de arquivos, podemos pesquisar todos os hardlinks sem a
-L
opção usada (com-xdev
opção) no mesmo sistema de arquivos / ponto de montagem. Ele salva a pesquisa desnecessária em diferentes pontos de montagem.Portanto, pesquisar no hardlink é um pouco mais rápido do que pesquisar nos softlinks (retifique se estou errado ou não estou claro).
fonte
Links simbólicos atribuem outro nome a um arquivo, de maneira semelhante aos links físicos. Mas um arquivo pode ser excluído mesmo se houver links simbólicos restantes.
fonte
Meus dois centavos no uso:
Links flexíveis podem ser usados para encurtar nomes de caminhos longos, ou seja:
As alterações feitas
/short/file.txt
serão aplicadas no arquivo original.Os links físicos podem ser usados para mover arquivos grandes:
ln /myapp/dev/application.bin /myapp/prd/application.bin
A cópia instantânea para uma pasta diferente e o arquivo original (ativado
/myapp/dev
) podem ser movidos ou excluídos, sem tocar no arquivo./myapp/prd
fonte
Acabei de encontrar uma maneira fácil de entender os links físicos em um cenário comum, a instalação de software.
Um dia, baixei um software para a pasta
Downloads
para instalação. Depois dissosudo make install
, alguns executáveis foramcp
editados na pasta bin local. Aqui,cp
cria um link físico . Fiquei feliz com o software, mas logo percebi queDownloads
não é um bom lugar a longo prazo. Entãomv
editei a pasta do software para osource
diretório. Bem, ainda posso executar o software como antes, sem me preocupar com nada relacionado ao link de destino, como no Windows. Isso significa que o hard link encontra o inode diretamente e outros arquivos.fonte
Nesta resposta, quando digo um arquivo, quero dizer o local na memória
Todos os dados salvos são armazenados na memória usando uma estrutura de dados chamada inodes. Cada inode possui um número de inod. O número do inode é usado para acessar o inode. Todos os links físicos para um arquivo podem ter nomes diferentes, mas compartilhar o mesmo número de inode. Como todos os links físicos têm o mesmo número de código (que acessam o mesmo código), todos apontam para a mesma memória física.
Um link simbólico é um tipo especial de arquivo. Como também é um arquivo, ele terá um nome de arquivo e um número de inode. Como dito acima, o número do inode acessa um inode que aponta para dados. Agora, o que torna um link simbólico especial é que os inodenumbers nos links simbólicos acessam os inodes que apontam para "um caminho" para outro arquivo. Mais especificamente, o número do inode no link simbólico acede aos inodes que apontam para outro link físico.
quando estamos movendo, copiando e excluindo um arquivo na GUI, estamos jogando com os hardlinks do arquivo e não com a memória física. quando excluímos um arquivo, estamos excluindo o hardlink do arquivo. não estamos eliminando a memória física.Se todos os hardlinks do arquivo forem excluídos, não será possível acessar os dados armazenados, embora ainda possam estar presentes na memória
fonte