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.

Nick Stinemates
fonte
2
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.
Ankush
13
Acho este link muito útil para entendê-lo. askubuntu.com/questions/108771/...
kta
2
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.

Martin York
fonte
2
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).
22468
52
Há uma boa explicação visual em um artigo sobre Linux Gazette
Rodrigue
1
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.

Adam Matan
fonte
12
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:

insira a descrição da imagem aqui

Aqui está como chegamos a essa imagem:

  1. 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
    
  2. 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
    
  3. 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.

akivajgordon
fonte
3
@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.

Tanktalus
fonte
35

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 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).
Prabhat Kumar Singh
fonte
3
"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.

buydadip
fonte
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.

ninguém
fonte
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.
Njsf 9/10/08
21

Eu indicaria a Wikipedia:

Alguns pontos:

  • Os links simbólicos, diferentemente dos links físicos, podem atravessar sistemas de arquivos (na maioria das vezes).
  • Os links simbólicos podem apontar para diretórios.
  • Os links físicos apontam para um arquivo e permitem que você consulte o mesmo arquivo com mais de um nome.
  • Enquanto houver pelo menos um link, os dados ainda estarão disponíveis.
Jauder Ho
fonte
1
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.

JesperE
fonte
6

Hard link vs Soft link

Hard link Vs Soft link pode ser facilmente explicado por esta imagem.

PGOEL
fonte
5
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.

Federico A. Ramponi
fonte
Sistema distribuído com pontos de montagem em diferentes locais em diferentes sistemas. Obviamente, isso poderia ser projetado para fora do sistema sendo consistente.
terson 9/10/08
Acho que o @Tanktalus forneceu um ótimo exemplo.
Nick Stinemates 9/10/08
4

No MSDN ,

Link simbólico

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"

Link físico

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

Junção

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:

mklink /J link_name target_path
Sнаđошƒаӽ
fonte
3

Além disso:

  1. O desempenho de leitura de links físicos é melhor que os links simbólicos (micro-desempenho)
  2. 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
Amr Mostafa
fonte
3

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.

Yassine Abdul-Rahman
fonte
3

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.

gnasher729
fonte
2

Uma entrada de diretório é um link para uma estrutura:

struct dentry{
    ino_t ino;
    char  name[256];
}

o ino é o número de inode, o nome é o nome do arquivo, a estrutura do inode pode ser como:

struct inode{
      link_t nlink; 
      ...
}

por exemplo, você cria um arquivo / 1, a entrada do diretório pode ser como:

struct dentry{
     ino_t ino; /* such as 15 */
     char  name[256]; /* "1" */
} 

a estrutura do inode pode ser como:

   struct inode{ /* inode number 15 */
         link_t nlink; /* nlink = 1 */
         ...
    }

então você cria um link físico (pode ser / 100), a entrada do diretório pode ser como:

  struct dentry{
     ino_t ino; /* 15 */
     char  name[256]; /* 100 */
  }

a estrutura do inode pode ser como:

   struct inode{ /* inode numebr 15 */
         link_t nlink; /* nlink = 2 */
         ...
    }

então você cria um link simbólico (pode ser / 200) para o arquivo 1, a entrada do diretório pode ser como:

  struct dentry{
        ino_t ino; /* such as 16 */
        char  name[256]; /* "200" */
  }

a estrutura do inode pode ser como:

   struct inode{ /* inode number 15 */ 
         link_t nlink; /* nlink = 2 */
         ...
    }

   struct inode{ /* inode number 16 */
         link_t nlink; /* nlink = 1 */
         ...
    } /* the data of inode 16 maybe /1 or 1 */
mc.robin
fonte
2

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 f6no meu diretório atual, bem como um diretório chamadot2 .

Arquivo nomeado f1e ./t2/f2são links simbólicos paraf6 .

Arquivo nomeado f7e ./t2/f8são links físicos def6 .

Para encontrar links suaves e físicos, podemos usar:

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

Para encontrar apenas o hardlink, podemos usar:

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

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

ChandanK
fonte
1

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.

lmmorris1
fonte
Não. O link simbólico não é "outro nome para o mesmo arquivo", é um arquivo por si só, vinculado ao arquivo de destino.
22416 Kusalananda
1

Meus dois centavos no uso:

Links flexíveis podem ser usados ​​para encurtar nomes de caminhos longos, ou seja:

ln -s /long/folder/name/on/long/path/file.txt /short/file.txt

As alterações feitas /short/file.txtserão aplicadas no arquivo original.

Os links físicos podem ser usados ​​para mover arquivos grandes:

$ ls -lh /myapp/dev/
total 10G
-rw-r--r-- 2 root root 10G May 22 12:09 application.bin

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

Matheus Santoro
fonte
0

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.

themefield
fonte
0

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

s. srinath
fonte