Hard Links e Links Simbólicos: O Comando ln e inodes

Hard Links e Links Simbólicos: O Comando ln e inodes

O Que Você Vai Conquistar

  • Explicar hard links vs links simbólicos pela perspectiva do inode
  • Usar ln / ln -s corretamente conforme a situação
  • Diagnosticar e evitar links quebrados (dangling links)
  • Entender restrições de links entre filesystems e diretórios
  • Responder a pergunta frequente no exame "hard links não podem cruzar filesystems" com fundamentação

Este é o núcleo do objetivo 104.6 do LPIC-1 "Criar e alterar hard links e links simbólicos". Entender links requer o conceito de inode (um número que aponta para os dados reais do arquivo).

Decidindo Entre Hard Links e Links Simbólicos

Aspecto Hard link Link simbólico
Comando de criação ln src link ln -s target link
Substância Outro nome para o mesmo inode Inode separado contendo uma string de caminho
Entre filesystems Não é possível Possível
Apontar para diretório Geralmente não é possível Possível
Quando original deletado Dados permanecem Torna-se um link quebrado (dangling link)
inode no ls -li Mesmo que o original Diferente do original

Se você precisa "cruzar filesystems" ou "apontar para um diretório", o link simbólico é a única opção. Para compartilhar a substância de um arquivo dentro do mesmo filesystem como uma multi-referência tipo backup, use um hard link.

Passos

echo "data" > original.txt
ls -li original.txt
1310721 -rw-r--r-- 1 user user 5 May 17 10:00 original.txt

O número inicial 1310721 é o número do inode e 1 é a contagem de hard links. O inode aponta unicamente para a substância do arquivo (blocos de dados e metadados). Um nome de arquivo é meramente uma referência a um inode.

ln original.txt hardlink.txt
ls -li original.txt hardlink.txt
1310721 -rw-r--r-- 2 user user 5 May 17 10:00 original.txt
1310721 -rw-r--r-- 2 user user 5 May 17 10:00 hardlink.txt

Ambos apontam para o mesmo inode 1310721 e a contagem de links aumentou para 2. Editar através de qualquer nome atualiza a mesma substância. Deletar original.txt não libera o inode até que a contagem de links chegue a 0.

ln -s original.txt symlink.txt
ls -li original.txt symlink.txt
1310721 -rw-r--r-- 2 user user 5 May 17 10:00 original.txt
1310733 lrwxrwxrwx 1 user user 12 May 17 10:01 symlink.txt -> original.txt

symlink.txt tem um inode diferente 1310733 e contém a string de caminho -> original.txt. Note que o flag de tipo é l (link).

readlink symlink.txt
readlink -f symlink.txt
ls -L symlink.txt
original.txt
/home/user/original.txt
-rw-r--r-- 2 user user 5 May 17 10:00 symlink.txt

readlink retorna a string bruta do alvo e readlink -f retorna o caminho absoluto final resolvido. ls -L segue o link e mostra as informações da substância.

rm original.txt
cat symlink.txt
find . -xtype l
cat: symlink.txt: No such file or directory
./symlink.txt

Deletar o original transforma symlink.txt em um symlink quebrado (dangling). find . -xtype l lista links simbólicos quebrados. Um hard link, por outro lado, mantém seus dados mesmo após o nome original ser deletado.

Por Que Hard Links Não Podem Cruzar Filesystems

Números de inode são um namespace independente por filesystem. O inode 100 em /dev/sda1 e o inode 100 em /dev/sdb1 são substâncias não relacionadas. Como um hard link é "outro nome para o mesmo inode", ele não pode compartilhar um inode entre filesystems diferentes, portanto a criação é rejeitada.

Um link simbólico é um arquivo independente que contém uma string de caminho em vez de um inode. Um caminho pode ser expresso entre filesystems, então ele pode apontar para outra partição, outro disco, ou até mesmo um caminho inexistente. O custo é que ele se torna um link quebrado no momento em que o alvo desaparece. Essa diferença de design cria o trade-off "hard links são robustos mas restritos; links simbólicos são flexíveis mas frágeis".

Hard links para diretórios são geralmente proibidos para prevenir referências circulares na hierarquia de diretórios que prenderiam ferramentas de travessia de árvore como find em loops infinitos.

Solução de Problemas

Causa: O source e o target estão em filesystems diferentes

Verificação:

df original.txt /mnt/other/

Correção: Se cruzar filesystems for necessário, use ln -s para um link simbólico. Confirme que ambos estão no mesmo ponto de montagem com df.

Causa: O link foi criado com um caminho relativo e depois o próprio link foi movido

Verificação:

readlink -f link

Correção: Se o link puder ser movido, especifique o alvo com um caminho absoluto (ln -s /abs/path/target link). Note que links relativos são resolvidos em relação à localização do link.

Causa: Um link com o mesmo nome já existe, causando File exists

Verificação:

ls -l link

Correção: Sobrescreva com ln -sf target link. Se o alvo for um diretório, use também ln -sfn para evitar criar acidentalmente o link dentro do diretório alvo.

Checklist de Conclusão

  • [ ] Verificou o número do inode e a contagem de links com ls -li
  • [ ] Confirmou que a contagem de links aumenta após criar um hard link
  • [ ] Confirmou que um link simbólico tem um inode separado e contém uma string de caminho
  • [ ] Confirmou o alvo de resolução final com readlink -f
  • [ ] Detectou links quebrados com find . -xtype l

Resumo

Cenário Comando Finalidade
Hard link ln src link Compartilhar substância dentro de um FS
Link simbólico ln -s target link Suporte cross-FS / diretório
Verificar inode ls -li Contagem de links / identidade
Resolver alvo readlink -f Caminho absoluto final
Detectar quebrado find . -xtype l Listar symlinks quebrados

O mecanismo de links é central para entender filesystems. Em seguida, avance para o shell environment e prioridades de processos para conectar o conhecimento operacional.

Próximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 -- Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos LPIC-1 Relacionados

Prática