Hard Links e Links Simbolicos: O Comando ln e inodes

Hard Links e Links Simbolicos: O Comando ln e inodes

O Que Voce Vai Conquistar

  • Explicar hard links vs links simbolicos pela perspectiva do inode
  • Usar ln / ln -s corretamente conforme a situacao
  • Diagnosticar e evitar links quebrados (dangling links)
  • Entender restricoes de links entre filesystems e diretorios
  • Responder a pergunta frequente no exame "hard links nao podem cruzar filesystems" com fundamentacao

Este e o nucleo do objetivo 104.6 do LPIC-1 "Criar e alterar hard links e links simbolicos". Entender links requer o conceito de inode (um numero que aponta para os dados reais do arquivo).

Decidindo Entre Hard Links e Links Simbolicos

Aspecto Hard link Link simbolico
Comando de criacao ln src link ln -s target link
Substancia Outro nome para o mesmo inode Inode separado contendo uma string de caminho
Entre filesystems Nao e possivel Possivel
Apontar para diretorio Geralmente nao e possivel Possivel
Quando original deletado Dados permanecem Torna-se um link quebrado (dangling link)
inode no ls -li Mesmo que o original Diferente do original

Se voce precisa "cruzar filesystems" ou "apontar para um diretorio", o link simbolico e a unica opcao. Para compartilhar a substancia de um arquivo dentro do mesmo filesystem como uma multi-referencia 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 numero inicial 1310721 e o numero do inode e 1 e a contagem de hard links. O inode aponta unicamente para a substancia do arquivo (blocos de dados e metadados). Um nome de arquivo e meramente uma referencia 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 atraves de qualquer nome atualiza a mesma substancia. Deletar original.txt nao libera o inode ate 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 contem a string de caminho -> original.txt. Note que o flag de tipo e 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 informacoes da substancia.

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 simbolicos quebrados. Um hard link, por outro lado, mantem seus dados mesmo apos o nome original ser deletado.

Por Que Hard Links Nao Podem Cruzar Filesystems

Numeros de inode sao um namespace independente por filesystem. O inode 100 em /dev/sda1 e o inode 100 em /dev/sdb1 sao substancias nao relacionadas. Como um hard link e "outro nome para o mesmo inode", ele nao pode compartilhar um inode entre filesystems diferentes, portanto a criacao e rejeitada.

Um link simbolico e um arquivo independente que contem uma string de caminho em vez de um inode. Um caminho pode ser expresso entre filesystems, entao ele pode apontar para outra particao, outro disco, ou ate mesmo um caminho inexistente. O custo e que ele se torna um link quebrado no momento em que o alvo desaparece. Essa diferenca de design cria o trade-off "hard links sao robustos mas restritos; links simbolicos sao flexiveis mas frageis".

Hard links para diretorios sao geralmente proibidos para prevenir referencias circulares na hierarquia de diretorios que prenderiam ferramentas de travessia de arvore como find em loops infinitos.

Solucao de Problemas

Causa: O source e o target estao em filesystems diferentes

Verificacao:

df original.txt /mnt/other/

Correcao: Se cruzar filesystems for necessario, use ln -s para um link simbolico. Confirme que ambos estao no mesmo ponto de montagem com df.

Causa: O link foi criado com um caminho relativo e depois o proprio link foi movido

Verificacao:

readlink -f link

Correcao: Se o link puder ser movido, especifique o alvo com um caminho absoluto (ln -s /abs/path/target link). Note que links relativos sao resolvidos em relacao a localizacao do link.

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

Verificacao:

ls -l link

Correcao: Sobrescreva com ln -sf target link. Se o alvo for um diretorio, use tambem ln -sfn para evitar criar acidentalmente o link dentro do diretorio alvo.

Checklist de Conclusao

  • [ ] Verificou o numero do inode e a contagem de links com ls -li
  • [ ] Confirmou que a contagem de links aumenta apos criar um hard link
  • [ ] Confirmou que um link simbolico tem um inode separado e contem uma string de caminho
  • [ ] Confirmou o alvo de resolucao final com readlink -f
  • [ ] Detectou links quebrados com find . -xtype l

Resumo

Cenario Comando Finalidade
Hard link ln src link Compartilhar substancia dentro de um FS
Link simbolico ln -s target link Suporte cross-FS / diretorio
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 e central para entender filesystems. Em seguida, avance para o shell environment e prioridades de processos para conectar o conhecimento operacional.

Proximas 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

Pratica