Conexões no Linux: Hard Links vs. Soft Links

No Linux, é comum a necessidade de criar referências a arquivos ou diretórios existentes. Essa funcionalidade, conhecida como "links", permite que o conteúdo de um arquivo ou a estrutura de um diretório sejam acessados por meio de um novo nome ou caminho. Modificações feitas através de qualquer uma das referências são refletidas em todas as outras, pois todas apontam para os mesmos dados subjacentes. Isso é particularmante útil em cenários onde softwares exigem caminhos específicos, mas mover os arquivos originais não é uma opção viável.

Links Rígidos (Hard Links)

Um link rígido é criado usando o comando ln nome_original link_nome. As principais características dos hard links são:

  • Eles só podem ser criados para arquivos, não para diretórios.
  • Não é possível criar hard links que cruzem diferentes partições ou discos.

Tanto o arquivo original quanto o hard link compartilham o mesmo inode. O inode é uma estrutura de dados que armazena metadados sobre um arquivo ou diretório, como permissões, datas de criação e modificação, mas não o conteúdo em si. Como compartilham o mesmo inode, hard links e seus arquivos originais possuem exatamente as mesmas permissões e informações. Qualquer alteração em uma referência (seja no arquivo original ou no link) é imediatamente refletida na outra, pois ambas acessam os mesmos metadados e dados.

Vamos demonstrar com um exemplo. Suponha que temos um arquivo chamado conteudo.txt com o texto "Olá Mundo!".


$ ls -l
-rw-r--r-- 1 usuario usuario 12 Jun 3 22:06 conteudo.txt

Agora, criamos um hard link para ele:


$ ln conteudo.txt link_rigido

Verificando a lista de arquivos:


$ ls -l
-rw-r--r-- 2 usuario usuario 12 Jun 3 22:06 conteudo.txt
-rw-r--r-- 2 usuario usuario 12 Jun 3 22:06 link_rigido

Observe que ambos os arquivos agora mostram '2' na contagem de links, indicando que há duas referências para o mesmo inode.

Se deletarmos o arquivo original, o hard link permanece intacto e funcional:


$ rm conteudo.txt
$ ls -l
-rw-r--r-- 1 usuario usuario 12 Jun 3 22:06 link_rigido
$ cat link_rigido
Olá Mundo!

Essencialmente, um hard link funciona como uma cópia de segurança. Enquanto existir pelo menos um hard link apontando para o inode, os dados estarão acessíveis, mesmo que o "arquivo original" seja removido. A remoção do arquivo original apenas decrementa a contagem de links associada ao inode.

Links Simbólicos (Soft Links)

Um link simbólico, ou soft link, é criado com o comando ln -s caminho_original link_nome. As diferenças cruciais são:

  • Soft links podem referenciar tanto arquivos quanto diretórios.
  • Eles funcionam como um atalho ou ponteiro para o caminho orignial.

Ao criar um soft link, ele possui seu próprio inode, distinto do inode do arquivo ou diretório original. Isso significa que suas permissões e metadados podem ser diferentes.

Continuando com o exemplo anterior, vamos criar um soft link para conteudo.txt:


$ ln -s conteudo.txt link_simbolico
$ ls -l
-rw-r--r-- 1 usuario usuario 12 Jun 3 22:06 conteudo.txt
lrwxrwxrwx 1 usuario usuario 13 Jun 3 22:14 link_simbolico -> conteudo.txt

O caractere 'l' no início da linha indica que link_simbolico é um link simbólico. A seta '->' mostra para onde ele aponta.

Se o arquivo original for removido, o soft link existirá, mas não poderá ser usado:


$ rm conteudo.txt
$ ls -l
lrwxrwxrwx 1 usuario usuario 13 Jun 3 22:14 link_simbolico -> conteudo.txt
$ cat link_simbolico
cat: link_simbolico: Arquivo ou diretório inexistente

Para garantir que um soft link continue funcionando mesmo após o arquivo ou diretório original ser movido ou o link simbólico ser copiado, é altamente recomendável usar caminhos absolutos ao criá-lo:


$ ln -s /home/usuario/diretorio_atual/conteudo.txt link_simbolico_absoluto

Se o soft link for criado usando um caminho relativo e o link to movido para outro local, a referência pode se quebrar, pois o caminho relativo deixará de ser válido em relação à nova posição do link.

Em essência, um soft link é análogo a um atalho no Windows. Ao interagir com o soft link (ler, editar), você está, na prática, operando nos dados do arquivo original através do ponteiro.

Remoção de Links

Para remover um link simbólico (por exemplo, meu_link que aponta para /opt/dados), utilize o comando rm meu_link. É crucial evitar comandos como rm meu_link/ ou rm -rf meu_link/, pois estes podem tentar remover o conteúdo do diretório de destino, o que é extremamente perigoso.

Tags: Linux links hard link soft link inode

Publicado em 6-6 18:12 por Thomas