Pergunta

Recentemente, fui convidado isso durante uma entrevista de emprego. Fui honesto e disse que eu sabia como simbólico se comporta da ligação e como criar um, mas não entendo o uso de um link de disco rígido e como ela difere de uma simbólica.

Foi útil?

Solução

Sob os arquivos do sistema de arquivos são representados por inodes (ou é vários inodes não tenho certeza)

Um arquivo no sistema de arquivos é basicamente um link para um inode.
Um link de disco rígido, em seguida, apenas cria um outro arquivo com um link para o mesmo inode subjacente.

Quando você apaga um arquivo, ele remove um link para o inode subjacente. O inode só é eliminado (ou deletable / over-gravável), quando todos os links para o inode foram excluídos.

Um link simbólico é um link para um outro nome no sistema de arquivos.

Uma vez que um link de disco rígido tenha sido feita a ligação é para o inode. exclusão de renomear ou mover o arquivo original não afetará o link difícil como links para o inode subjacente. Quaisquer alterações aos dados no inode é refletido em todos os arquivos que se referem a que inode.

Nota: Hard links são válidos somente dentro do mesmo sistema de arquivos. Os links simbólicos pode abranger sistemas de arquivos como eles são simplesmente o nome de outro arquivo.

Outras dicas

Alguns nice intuição de que poderia ajudar, usando qualquer console Linux (ish).

Criar dois arquivos:

$ touch foo; touch bar

inserir alguns dados para eles:

$ echo "Cat" > foo
$ echo "Dog" > bar

(Na verdade, eu poderia ter eco utilizado em primeiro lugar, como ele cria os arquivos, se eles não existem ... mas não importa.)

E como esperado:

$cat foo; cat bar
Cat
Dog

Vamos criar links duros e moles:

$ ln foo foo-hard
$ ln -s bar bar-soft

Vamos ver o que aconteceu:

$ ls -l

foo
foo-hard
bar
bar-soft -> bar

Mudar o nome de foo não importa:

$ mv foo foo-new
$ cat foo-hard
Cat

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

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

O conteúdo do arquivo não pôde ser encontrado porque os soft link aponta para o nome, que foi alterado, e não ao conteúdo.

Da mesma forma, Se foo é excluído, foo-hard ainda detém o conteúdo; se bar é excluído, bar-soft é apenas um link para um arquivo não-existente.

Como diz o ditado, uma imagem vale mais que mil palavras. Aqui está como eu visualizá-lo:

enter descrição da imagem aqui

Aqui é como chegamos a esse quadro:

  1. Criar um myfile.txt nome no sistema de arquivo que aponta para um novo inode (que contém os metadados do arquivo e aponta para os blocos de dados que contêm seu conteúdo, ou seja, o texto "Olá, mundo!":

    $ echo 'Hello, World!' > myfile.txt
    
  2. Criar um link my-hard-link difícil o myfile.txt arquivo, que significa "criar um arquivo que deve apontar para o mesmo inode que myfile.txt aponta para":

    $ ln myfile.txt my-hard-link
    
  3. Criar um my-soft-link soft link ao myfile.txt arquivo, que significa "criar um arquivo que deve apontar para o myfile.txt arquivo":

    $ ln -s myfile.txt my-soft-link
    

Veja o que vai acontecer agora se myfile.txt é eliminado (ou movido): my-hard-link pontos ainda para o mesmo conteúdo, e é, portanto, inalterado, enquanto my-soft-link agora aponta para nada. Outras respostas discutir os prós / contras de cada um.

Hard links são úteis quando o arquivo original está sendo movimentados. Por exemplo, mover um arquivo de / bin / usr / bin ou / usr / / bin local. Qualquer link simbólico para o arquivo em bin / seria quebrado por isso, mas uma hardlink, sendo um link diretamente para o inode para o arquivo, não se importaria.

Hard links pode levar menos espaço em disco como eles só ocupam uma entrada de diretório, enquanto um link simbólico precisa de seu próprio inode para armazenar o nome ele aponta.

Hard links também levam menos tempo para resolver - links simbólicos podem apontar para outros links simbólicos que estão em diretórios simbolicamente. E alguns deles poderiam estar em outros sistemas de arquivos de alta latência NFS ou, e isso pode resultar em tráfego de rede para resolver. Hard links, estando sempre no mesmo sistema de arquivos, são sempre resolvidos em um único look-up, e nunca envolvem a latência de rede (se é um hardlink em um sistema de arquivos NFS, o servidor NFS faria a resolução, e seria invisível para o sistema do cliente). Às vezes, isso é importante. Não é para mim, mas posso imaginar sistemas de alto desempenho onde isso pode ser importante.

Eu também acho que coisas como mmap (2) e até open (2) usar a mesma funcionalidade que hardlinks para manter inode de um arquivo ativo de modo que mesmo se o arquivo fica unlink ed (2), os restos de inode para permitir que o processo de contínuo acesso, e apenas uma vez o fechamento do processo que faz o arquivo realmente possam ir embora. Isso permite que arquivos temporários muito mais seguro (se você pode obter a céu aberto e desvincular a acontecer atomicamente, que pode haver uma API POSIX para que eu não estou lembrando, então você realmente tem um arquivo temporário seguro), onde você pode ler / escrever seus dados sem que ninguém possa acessá-lo. Bem, isso era verdade antes / proc deu a todos a capacidade de olhar para seus descritores de arquivo, mas isso é outra história.

Falando nisso, a recuperação de um arquivo que está aberto no processo A, mas desassociou nas gira sistema de arquivos em torno de usar hardlinks para recriar as ligações de inode para que o ficheiro não desaparece quando o processo que tem que fecha abri-lo ou vai embora.

Uma simples maneira de ver a diferença entre um link de disco rígido e um link simbólico é através de um exemplo simples. Um hard link para um arquivo irá apontar para o local onde o arquivo está armazenado, ou o inode do arquivo. Um link simbólico irá apontar para o próprio arquivo real.

Então, se temos um arquivo chamado "a" e criar um hard link "b" e um link simbólico "c", que todos se referem a arquivo de "a":

echo "111" > a
ln a b
ln -s a c

A saída do "a", "b" e "c" será:

cat a --> 111
cat b --> 111
cat c --> 111

Agora vamos arquivo remove "a" e ver o que acontece com a saída do "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 arquivo "C" aponta para arquivo "a" em si, se o arquivo "a" for removido, então arquivo "c" não terá nada a ponto de, na verdade, é também excluído.

No entanto, arquivo "b" aponta para o local de armazenagem, ou o inode, de arquivo de "a". Então, se o arquivo "a" for removido, então ele não será mais ponto para o inode, mas porque o arquivo "b" faz, o inode continuará a armazenar qualquer conteúdo pertencia a "a" até que não haja ligações mais duras apontam para isso.

Macio link :

macio ou simbólica é mais um atalho para o arquivo original .... se você excluir o original do atalho falhar e se você só apagar o atalho nada acontece com o original.

link macia Sintaxe : ln -s Pathof_Target_file link

Output: link -> ./Target_file

Proof: readlink link Também na saída ls -l link você vai ver a primeira letra em lrwxrwxrwx como l que é indicação de que o arquivo é um link simbólico.

Excluir o link: unlink link

Nota: Se desejar, o seu softlink pode trabalhar mesmo depois de movê-lo em outro lugar do dir atual. Certifique-se de dar caminho absoluto e não caminho relativo ao criar um soft link. isto é, (a partir de / raiz / utilizador / arquivo_de_destino e não ./Target_file)

Disco Link:

link rígido é mais de uma cópia do espelho ou vários caminhos para o mesmo arquivo. Faça algo para file1 e ele aparece no arquivo 2. um Excluindo ainda mantém o outro ok.

O inode (ou arquivo) só é excluído quando todas as ligações (duro) ou todos os caminhos para o (mesmo arquivo) inode foi suprimido.

Uma vez que um link de disco rígido tenha sido feita a ligação tem o inode do arquivo original. Excluindo renomear ou mover o arquivo original não afetará o link difícil como links para o inode subjacente. Quaisquer alterações aos dados no inode é refletido em todos os arquivos que se referem a que inode.

Difícil Fazer a ligação sintaxe : ln Target_file link

Saída:. Um arquivo com link do nome será criado com o mesmo número inode como de targetfile

Proof: ls -i link Target_file (verificar seus inodes)

Excluir o link: rm -f link (Excluir o link como um arquivo normal)

Nota : Os links simbólicos pode abranger sistemas de arquivos como eles são simplesmente o nome de outro arquivo. Considerando hard links são válidos somente dentro do mesmo sistema de arquivos.

Os links simbólicos têm algumas características hard links estão faltando:

  • link rígido ponto ao conteúdo do ficheiro. enquanto soft link aponta para o nome do arquivo.
  • enquanto o tamanho de hard link é o tamanho do conteúdo, enquanto soft link é tendo o tamanho de nome de arquivo.
  • Hard links compartilham o mesmo inode. soft links não.
  • ligações duro pode sistemas de arquivos não transversais. soft links fazer.
  • Você sabe imediatamente onde um link simbólico aponta para enquanto com disco links, você precisa para explorar todo o sistema de arquivos para encontrar arquivos compartilhando o mesmo inode.

    # find / -inum 517333

    /home/bobbin/sync.sh
    /root/synchro
    
  • hard-links não podem apontar para diretórios.

Os links de disco rígido tem duas limitações:

  • Os diretórios podem não ser difícil ligada. O Linux não permite isso para manter a estrutura de árvore acíclica de diretórios.
  • Um link de disco rígido não pode ser criado através de sistemas de arquivos. Ambos os arquivos devem estar nos mesmos sistemas de arquivos, porque os diferentes sistemas de arquivos têm diferentes tabelas de inode independentes (dois arquivos em sistemas de arquivos diferentes, mas com mesmo número inode será diferente).

Os links simbólicos conectar-se a um nome de caminho. Isso pode ser em qualquer lugar na árvore de arquivos de um sistema, e nem sequer tem de existir quando o link é criado. O caminho de destino pode ser relativo ou absoluto.

Hard links são ponteiros adicionais para um inode, o que significa que só podem existir no mesmo volume como o destino. hard links adicionais para um arquivo são indistinguíveis a partir do nome "original" utilizado para fazer referência a um arquivo.

Gostaria de apontar-lhe Wikipedia:

Alguns pontos:

  • Symlinks, ao contrário de ligações fortes, pode cruzar sistemas de arquivos (na maioria das vezes).
  • Symlinks pode apontar para diretórios.
  • Difícil links apontam para um arquivo e permitir que você se referem ao mesmo arquivo com mais de um nome.
  • Enquanto houver pelo menos um link, os dados ainda está disponível.

Hard links são muito úteis ao fazer backups incrementais. Consulte rsnapshot , por exemplo. A idéia é fazer cópia usando links de disco rígido:

  • número de cópias de backup n para n + 1
  • cópia de backup n - 1 para n
  • ...
  • cópia de backup 0 para backup 1
  • atualização de backup 0 com quaisquer arquivos alterados.

O novo backup não vai ocupar qualquer espaço extra para além de quaisquer alterações feitas, uma vez que todos os backups incrementais irá apontar para o mesmo conjunto de inodes para arquivos que não foram alterados.

I acrescentar sobre a pergunta de Nick: quando são hard links útil ou necessário? A única aplicação que vem à minha mente, em que links simbólicos não faria o trabalho, está fornecendo uma cópia de um arquivo de sistema em um ambiente chroot.

ligação rígido vs ligação soft

link rígido ligação Vs suave pode ser facilmente explicado por esta imagem.

Além disso:

  1. Leia desempenho dos links de disco rígido é melhor do que links simbólicos (micro-performance)
  2. Os links simbólicos podem ser copiados, controlado por versão, .etc. Em outras palavras, eles são um arquivo real. No outro extremo, um hard link é algo a um nível ligeiramente mais baixo e você vai achar que em comparação com links simbólicos, há menos ferramentas que fornecem meios para trabalhar com os links de disco rígido como links de disco rígido e não como arquivos normais

O que você pensa como um "arquivo" comum é realmente duas coisas distintas: Os dados de um arquivo, e uma entrada de diretório. Quando você cria um link de disco rígido para um arquivo, você realmente criar uma segunda entrada de diretório que se refere aos mesmos dados. Ambas as entradas de diretório têm exatamente a mesma funcionalidade; cada um pode ser usado para abrir o arquivo para lê-lo. Então, você realmente não tem "um arquivo de mais um hard link", você tem "dados de arquivo com duas entradas do diretório". O que você acha de como a exclusão de um arquivo realmente exclui uma entrada de diretório, e quando a última entrada de diretório para os dados são eliminados, em seguida, os dados em si é excluído também. Para arquivos comuns que têm apenas uma entrada de diretório, excluir a entrada de diretório irá apagar os dados como sempre. (Enquanto um arquivo é aberto, o sistema operacional cria uma ligação temporária para o arquivo, por isso mesmo quando você excluir todas as entradas de diretório, as estadias de dados, mas desaparece assim que você fechar o arquivo).

Por exemplo, crie um arquivo A.txt, um disco ligação b.txt e excluir A.txt. Quando você criou A.txt, alguns dados foi criado, e uma entrada de diretório A.txt. Quando você criou o link de disco rígido, uma outra entrada de diretório b.txt foi criado, apontando para os mesmos dados. Ao excluir A.txt, você ainda tem todos os dados e uma única entrada de diretório b.txt, exatamente como se você tivesse criar um arquivo b.txt em primeiro lugar.

Um link macia é apenas um (quase) arquivo normal, exceto que ele não contém dados, mas o caminho de outra entrada de diretório. Se você excluir o arquivo que o soft link refere-se, em seguida, o link macio irá conter um caminho que não aponta para uma entrada de diretório mais; está quebrado. Se você excluir o link suave, é como a exclusão de qualquer outro arquivo, o arquivo que aponta para não é afetado.

MSDN ,

Link simbólico

Um link simbólico é um objeto de sistema de arquivo que aponta para outro objeto do sistema de arquivos. O objeto a ser apontado é chamado o alvo.

Os links simbólicos são transparentes para os usuários; os links aparecem como normal arquivos ou diretórios, e pode ser posta em prática pelo usuário ou aplicação exatamente da mesma maneira.

Os links simbólicos são projetados para auxiliar na migração e aplicação compatibilidade com sistemas operacionais UNIX. Microsoft implementou seus links simbólicos para a função assim como ligações UNIX.

Os links simbólicos podem ser links absolutos ou relativos. Absoluto ligações são ligações que especificam cada parte do nome de caminho; relativo ligações são determinadas em relação a onde de ligação relativa especificadores estão em um caminho especificado

Um exemplo de link simbólico Absolute

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

Um exemplo de Relativas Links Simbólicos

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"

ligação rígido

A hard link é a representação do sistema de arquivos de um arquivo pelo qual mais de um referências de caminho de um único arquivo no mesmo volume .

Para criar um link de disco rígido em Windows, navegue até onde link está a ser criado e digite o comando:

mklink /H Link_name target_path

Note que você pode apagar links de disco rígido qualquer ordem, independentemente da ordem em que eles foram criados. Além disso, links de disco rígido não pode ser criado quando

  • referências estão em diferentes unidades locais
  • referências incluem unidade de rede. Em outras palavras, uma das referências é uma unidade de rede
  • link difícil de ser criado é no mesmo caminho como o alvo

junção

NTFS suporta um outro tipo link chamado de junção. MSDN define-o como segue:

A junção (também chamado de soft link) difere de um link de disco rígido em que o armazenamento de objetos que referências são diretórios separados, e uma junção pode ligar diretórios localizados em volumes diferentes locais no mesmo computador . Caso contrário, junções funcionam de forma idêntica aos hard links.

As peças em negrito na seção link de disco rígido e seção de junção mostrar a diferença básica entre os dois.

Comando para criar uma junção no Windows, navegue até onde link está a ser criado e, em seguida, digite:

mklink /J link_name target_path

Simplesmente, ligação rígido: é apenas adicionar novo nome para um arquivo, que é média, um arquivo pode ter muitas nome no mesmo tempo, todos os nomes são iguais uns aos outros, ninguém preferido, ligação Difícil não é mau para cópia os todos os conteúdos de arquivo e fazer novo arquivo não é isso, basta criar um nome alternativo a ser conhecido ..

link simbólico (symlink): é um ponteiro de arquivo para outro arquivo, se o link simbólico aponta para um arquivo existente que posteriormente é excluído, o link simbólico continua a apontar para o mesmo nome de arquivo, embora o nome não nomes de quaisquer arquivo.

Uma entrada de diretório é o link de um structrue:

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

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

struct inode{
      link_t nlink; 
      ...
}

Por exemplo, você creat um arquivo / 1, a entrada de diretório talvez como:

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

o struct inode talvez como:

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

, em seguida, você cria um link de disco rígido (pode ser / 100), a entrada de diretório talvez como:

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

o struct inode talvez como:

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

, em seguida, você cria um link simbólico (pode ser / 200) para arquivo 1, a entrada de diretório talvez como:

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

o struct inode talvez 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 */

Somando-se todas as respostas acima, a diferença em encontrar o hardlink e arquivo softlink pode ser entendida como a seguir:

Eu tenho um f6 arquivo no meu diretório atual, bem como um diretório chamado t2.

arquivo chamado f1 e ./t2/f2 são links simbólicos para f6.

arquivo chamado f7 e ./t2/f8 são links rígidos de f6.

Para macia, bem como hard link podemos usar:

$ find -L . -samefile f6 

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

Para encontrar somente hardlink podemos usar:

$ find . -xdev -samefile f6

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

Desde hardlinks podem ser criados no mesmo sistema de arquivos, podemos pesquisar todos os hardlinks sem opção -L usado (com opção -xdev) na / mount-point do mesmo sistema de arquivos. Ele salva a busca desnecessária em diferentes pontos de montagem.

Assim, pesquisando na hardlink é um pouco mais rápido, então pesquisando os softlinks (Por favor, corrigir se eu estiver errado ou não é claro).

Os links simbólicos dar outro nome para um arquivo, de forma semelhante aos hard links. Mas um arquivo pode ser excluído, mesmo que haja restante links simbólicos.

Eu encontrei uma maneira fácil de entender links de disco rígido em um cenário comum, instale software.

Um dia eu baixei um software para Downloads pasta para instalar. Depois que eu fiz sudo make install, alguns executáveis ??foram cped a pasta bin local. Aqui, cp cria hard link . Eu estava feliz com o software, mas logo percebeu que Downloads não é um bom lugar no longo prazo. Então eu mved a pasta software para o diretório source. Bem, eu ainda pode executar o software como antes, sem se preocupar com qualquer link alvo coisas, como no Windows. Isto significa hard link achados inode diretamente e outros arquivos de volta.

Nesta resposta quando eu digo um arquivo que eu quero dizer a localização na memória

Todos os dados que são salvos são armazenados na memória usando uma estrutura de dados chamada inodes Cada inode tem um número inode inodenumber.The é usado para acessar o inode.All as ligações diretas para um arquivo pode ter nomes diferentes, mas compartilham o mesmo inode number.Since todos os links rígidos têm o mesmo inodenumber (cujo acesso inturn o mesmo inode), todos eles apontam para a mesma memória física.

Uma ligação simbólica é um tipo especial de file.Since é também um arquivo terá um nome de arquivo e um inode number.As disse acima o número inode acceses um inode que aponta para data.Now o que faz um link simbólico especial é que os inodenumbers em links simbólicos acessar esses inodes que apontam para "um caminho" para outro file.More especificamente o número inode no link simbólico acceses esses inodes que ponto a outro link de disco rígido.

quando estamos em movimento, copiar, excluir um arquivo em GUI que estamos jogando com os hardlinks do arquivo não o significa memória física que excluir um arquivo que está excluindo o hardlink do arquivo. não estamos acabando com o memory.If física todos os hardlinks para arquivo são excluídos, então não será possível acessar os dados armazenados embora ainda podem estar presentes na memória

Os meus dois centavos ao uso:

Macio links 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.txt será aplicado sobre o arquivo original.

Disco links podem ser usados ??para mover grandes arquivos:

$ 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

cópia Instantânea para outra pasta, e arquivo original (em /myapp/dev) podem ser movidos ou excluídos, sem tocar o arquivo no /myapp/prd

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top