A principal vantagem dos hard links é que, em comparação com soft links, não há penalidade de tamanho ou velocidade. Links suaves são uma camada extra de indireção sobre o acesso normal a arquivos; o kernel precisa cancelar a referência ao link quando você abre o arquivo, e isso leva um pouco de tempo. O link também ocupa uma pequena quantidade de espaço no disco para conter o texto do link. Essas penalidades não existem com hard links porque elas são construídas na própria estrutura do sistema de arquivos.
A melhor maneira que conheço para ver isso é:
$ ls -id .
1069765 ./
$ mkdir tmp ; cd tmp
$ ls -id ..
1069765 ../
A opção -i
para ls
faz com que ele forneça o número do inode do arquivo . No sistema em que preparei o exemplo acima, aconteceu de eu estar em um diretório com o número de inode 1069765, mas o valor específico não importa. É apenas um valor único que identifica um determinado arquivo / diretório.
O que isso diz é que quando entramos em um subdiretório e olhamos para uma diferente entrada do sistema de arquivos chamada ..
, ele tem o mesmo número de inode que obtivemos antes. Isso não está acontecendo porque o shell está interpretando ..
para você, como acontece com o MS-DOS e o Windows. Em sistemas de arquivos Unix ..
é uma entrada de diretório real; é um link difícil apontando para o diretório anterior.
Hard links são os tendões que unem os diretórios do sistema de arquivos. Era uma vez, o Unix não tinha links físicos. Eles foram adicionados para transformar o sistema de arquivos simples original do Unix em um sistema de arquivos hierárquico.
(Para mais informações, consulte Por que '/' tem um '. . 'entrada? .)
Também é comum em sistemas Unix que vários comandos diferentes sejam implementados pelo mesmo executável. Não parece ser mais o caso no Linux, mas nos sistemas que eu usei no passado, cp
, mv
e rm
eram todos executáveis. Faz sentido se você pensar sobre isso: quando você move um arquivo entre volumes, é efetivamente uma cópia seguida por uma remoção, então mv
já teve que implementar as funções dos outros dois comandos. O executável pode descobrir qual operação deve ser fornecida porque recebe o nome pelo qual foi chamado.
Outro exemplo, comum em Linuxes embarcados, é o BusyBox , um único executável que implementa dezenas de comandos.
Devo salientar que, na maioria dos sistemas de arquivos, os usuários não podem criar links físicos para diretórios. As entradas .
e ..
são gerenciadas automaticamente pelo código do sistema de arquivos, que normalmente faz parte do kernel. A restrição existe porque é possível causar problemas sérios no sistema de arquivos se você não tiver cuidado com a maneira como cria e usa links diretos de diretório. Esta é uma das muitas razões pelas quais existem soft links; eles não carregam o mesmo risco.