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 -scorretamente 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
Passo 1: Verificar inode e contagem de links
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.
Passo 2: Criar um hard link
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.
Passo 3: Criar um link simbolico
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).
Passo 4: Confirmar o alvo de resolucao do 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.
Passo 5: Detectar links quebrados
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
Sintoma: ln falha com Invalid cross-device link
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.
Sintoma: Um link simbolico aponta para um lugar inesperado
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.
Sintoma: ln -s nao consegue atualizar um link existente
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.