Saltar para o conteúdo
101 · LPIC-1 (parte 1)

104.6 Criar e alterar links simbólicos e hardlinks

TópicoT22ObjetivoCriar e gerenciar hard links e links simbólicos (soft links)Peso1PáginasLPIC-1 (101) - Version 5.0

Resumo Conciso

CaracterísticaLink Físico (Hard Link)Link Simbólico (Soft Link)
Comandoln TARGET LINK_NAMEln -s TARGET LINK_NAME
Aponta paraMesmo inode (dados no disco)Caminho de outro arquivo
Mesma partição?Sim (obrigatório)Não (pode atravessar partições)
Contagem de linksAumenta a contagem do arquivoNão aumenta
Efeito de excluir destinoDados persistem (outro link existe)Link "quebra"
Identificação no lsMesmo inode, contagem > 1Primeiro caractere l, seta ->
Permissões no lsPermissões reaisSempre rwxrwxrwx (irrelevante)

Comandos Principais

ComandoFunção
ln TARGET LINK_NAMECriar link físico
ln -s TARGET LINK_NAMECriar link simbólico
ls -liListar com número inode
ls -lhListar com tamanhos legíveis

Inode

Um inode é uma estrutura de dados que armazena os atributos de um objeto (arquivo ou diretório) em um sistema de arquivos: permissões, proprietário, blocos do disco com os dados. Vem de "index node".

  • Todos os nomes (links) são equivalentes e apontam para os mesmos dados
  • Alterar o conteúdo de um altera todos os outros
  • Excluir um nome não afeta os outros (enquanto houver pelo menos um)
  • Contagem de links: arquivo normal começa com 1; cada hard link incrementa
  • Diretórios começam com contagem 2
  • Só podem residir no mesmo sistema de arquivos
  • Apontam para caminhos (não inodes)
  • Podem apontar para arquivos e diretórios
  • Podem atravessar partições e sistemas de arquivos
  • Podem ser removidos com rm e movidos com mv
  • Cuidado com caminhos relativos — podem "quebrar" se movidos
bash
ln target.txt /home/carol/Documents/hardlink    # Hard linkln -s target.txt /home/carol/Documents/softlink  # Soft link
bash
lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> target.txt
  • Primeiro caractere l = link simbólico
  • -> target.txt = destino do link
  • Permissões sempre rwxrwxrwx (as reais são as do destino)

Verificando Inodes

bash
ls -li# 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink# 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt

Mesmo número de inode = hard link entre si.

Caminhos Absolutos vs Relativos

bash
# RUIM (relativo) — pode quebrar se o link for movidoln -s original.txt softlink# BOM (absoluto) — funciona mesmo se movidoln -s /home/carol/Documents/original.txt softlink

Exercícios Exploratórios

Enunciado: Você cria um arquivo chamado recipes.txt, um hard link chamado receitas.txt e um soft link chamado rezepte.txt:

bash
touch recipes.txtln recipes.txt receitas.txtln -s recipes.txt rezepte.txt

O que aconteceria com o link rezepte.txt se o nome receitas.txt fosse excluído? Por quê?

O link simbólico rezepte.txt continuaria funcionando normalmente, porque ele aponta para recipes.txt, e não para receitas.txt. A exclusão de receitas.txt não afeta rezepte.txt, já que receitas.txt é apenas um hard link para o mesmo inode de recipes.txt. Enquanto recipes.txt existir (ou outro hard link para o mesmo inode), o soft link rezepte.txt continuará apontando para o destino correto.

Enunciado: Você tem um pendrive montado em /media/youruser/FlashA. Tenta criar um hard link:

bash
ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf

O que aconteceria? Por quê?

O comando falharia. A mensagem de erro seria "Invalid cross-device link" (Link inválido entre dispositivos): os links físicos não podem apontar para um destino em uma partição ou dispositivo diferente. A única maneira é usar um link simbólico (ln -s).

Enunciado: Considere a seguinte saída de ls -lah:

bash
-rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip-rw-r--r-- 4 carol carol  77K jun 17 17:25 document.txt-rw-r--r-- 1 carol carol 216K jun 17 17:25 image.png-rw-r--r-- 4 carol carol  77K jun 17 17:25 text.txt

Quantos links apontam para document.txt? Trata-se de links físicos ou simbólicos? Qual parâmetro passar para ls para ver o inode?

Todos os arquivos começam com 1 na contagem de links. Como a contagem de links de document.txt é 4, existem três links apontando para ele. São links físicos, já que links simbólicos não aumentam a contagem. O parâmetro é -i. O inode será mostrado na primeira coluna da saída.

Enunciado: Você tem ~/Documents/clients.txt e ~/Documents/somedir/clients.txt. Cria um link em somedir:

bash
cd somedir/ln -s clients.txt partners.txt

Depois move o link para ~/Documents e lista seu conteúdo. O link ainda funciona? Qual arquivo terá seu conteúdo listado?

O link funcionará e o arquivo listado será o que está em ~/Documents (contendo John, Michael, Bob). Lembre-se de que, como não especificamos o caminho completo para o alvo clients.txt ao criar o link, o destino será interpretado como relativo ao local do link. Quando movido de somedir para ~/Documents, coincidentemente existe um arquivo chamado clients.txt nesse diretório, então o link apontará para ele em vez do destino original.

Enunciado: Considere:

bash
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txtlrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt

Quais são as permissões de acesso de partners.txt? Por quê?

As permissões de acesso de partners.txt são rw-r--r--, já que os links sempre herdam as mesmas permissões de acesso do alvo.