Criação de Links no Linux

LinuxBeginner
Pratique Agora

Introdução

Em sistemas Linux, os links oferecem uma maneira poderosa de referenciar arquivos e diretórios. Esses links criam conexões entre nomes de arquivos e os dados reais armazenados no disco. Compreender como usar links de forma eficaz é uma habilidade essencial para usuários e administradores de sistemas Linux.

Este laboratório irá guiá-lo através da criação e utilização de dois tipos de links no Linux:

  1. Hard Links (Links rígidos): São entradas de diretório adicionais que apontam para o mesmo inode (dados no disco). Quando você cria um hard link, você está essencialmente dando aos mesmos dados outro nome.

  2. Symbolic Links (Links simbólicos), também chamados de soft links: São arquivos especiais que apontam para outros arquivos por nome. Ao contrário dos hard links, os symbolic links podem apontar para diretórios e podem abranger diferentes sistemas de arquivos.

Ao final deste laboratório, você entenderá como criar ambos os tipos de links usando o comando ln e aprenderá suas aplicações práticas em um ambiente Linux.

Criando um Diretório de Trabalho

Nesta etapa, criaremos uma estrutura de diretórios e arquivos que usaremos para praticar a criação de links.

Primeiro, vamos verificar nossa localização atual para garantir que estamos no diretório correto. Execute o seguinte comando:

pwd

Você deve ver /home/labex/project como saída. Se você estiver em um diretório diferente, navegue até o diretório do projeto:

cd /home/labex/project

Agora, vamos criar um novo diretório chamado linklab onde armazenaremos nossos arquivos:

mkdir /home/labex/project/linklab

Vamos navegar para este diretório:

cd /home/labex/project/linklab

Agora, vamos criar dois arquivos de texto que usaremos para praticar a criação de links:

echo "This is the original file for our link examples." > original.txt

Vamos verificar se nosso arquivo foi criado corretamente:

ls -l

Você deve ver uma saída semelhante à seguinte:

-rw-r--r-- 1 labex labex 46 [date and time] original.txt

Vamos também examinar o conteúdo do arquivo:

cat original.txt

Você deve ver o texto que inserimos anteriormente exibido no terminal:

This is the original file for our link examples.

Um hard link é outro nome que aponta para exatamente os mesmos dados no disco que o arquivo original. Tanto o arquivo original quanto o hard link compartilham o mesmo número de inode, o que significa que eles são essencialmente o mesmo arquivo com nomes diferentes.

Para criar um hard link, usamos o comando ln. Vamos criar um hard link para o nosso arquivo original.txt:

ln /home/labex/project/linklab/original.txt /home/labex/project/linklab/hardlink.txt

Este comando cria um novo arquivo chamado hardlink.txt que é um hard link para original.txt. Agora, vamos verificar se nosso hard link foi criado corretamente:

ls -li

A opção -i mostra o número do inode para cada arquivo. Você deve ver que original.txt e hardlink.txt têm o mesmo número de inode, indicando que são o mesmo arquivo.

A saída deve ser semelhante à seguinte:

[inode number] -rw-r--r-- 2 labex labex 46 [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex 46 [date and time] original.txt

Observe que o número 2 após as permissões do arquivo indica o número de hard links que apontam para o inode. Tanto original.txt quanto hardlink.txt mostram uma contagem de links de 2, porque agora existem dois arquivos que apontam para os mesmos dados.

Vamos demonstrar que a modificação de um arquivo afeta o outro, já que eles são essencialmente o mesmo arquivo:

echo "This is an added line." >> original.txt
cat hardlink.txt

Você deve ver ambas as linhas exibidas na saída:

This is the original file for our link examples.
This is an added line.

Isso confirma que as alterações em original.txt são refletidas em hardlink.txt.

Da mesma forma, se modificarmos hardlink.txt, as alterações serão refletidas em original.txt:

echo "Another line added through the hard link." >> hardlink.txt
cat original.txt

A saída agora deve mostrar todas as três linhas:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.

Symbolic links (também conhecidos como soft links ou symlinks) são diferentes dos hard links. Um symbolic link é um arquivo separado que simplesmente aponta para outro arquivo por nome. Ele não compartilha o mesmo inode com o arquivo de destino.

Para criar um symbolic link, usamos o comando ln com a opção -s. Vamos criar um symbolic link para o nosso arquivo original.txt:

ln -s /home/labex/project/linklab/original.txt /home/labex/project/linklab/symlink.txt

Este comando cria um novo arquivo chamado symlink.txt que é um symbolic link para original.txt. Agora, vamos verificar se nosso symbolic link foi criado corretamente:

ls -li

A saída deve ser semelhante à seguinte:

[inode number] -rw-r--r-- 2 labex labex  [size] [date and time] hardlink.txt
[inode number] -rw-r--r-- 2 labex labex  [size] [date and time] original.txt
[inode number] lrwxrwxrwx 1 labex labex  [size] [date and time] symlink.txt -> /home/labex/project/linklab/original.txt

Observe o l no início das permissões para symlink.txt, indicando que é um symbolic link. Além disso, a saída mostra o caminho para o qual o symbolic link aponta. Você também pode ver que original.txt e symlink.txt têm números de inode diferentes, confirmando que são arquivos separados.

Vamos verificar o conteúdo do symbolic link:

cat symlink.txt

Você deve ver o mesmo conteúdo que em original.txt:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.

Vamos adicionar outra linha através do symbolic link:

echo "This line was added through the symbolic link." >> symlink.txt
cat original.txt

A saída agora deve incluir todas as quatro linhas:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.

Isso confirma que as alterações feitas através do symbolic link afetam o arquivo de destino.

Agora, vamos ver o que acontece quando excluímos o arquivo de destino:

mv original.txt original.txt.bak
cat symlink.txt

Você deve ver uma mensagem de erro como:

cat: symlink.txt: No such file or directory

Isso ocorre porque o symbolic link ainda aponta para /home/labex/project/linklab/original.txt, que não existe mais. Esta é uma diferença fundamental entre hard links e symbolic links.

Vamos restaurar o arquivo original:

mv original.txt.bak original.txt
cat symlink.txt

O symbolic link funciona novamente porque o arquivo de destino existe mais uma vez.

Agora que criamos hard e symbolic links, vamos comparar suas principais diferenças:

Hard Links:

  1. Compartilham o mesmo inode que o arquivo original
  2. Não podem linkar para diretórios
  3. Não podem cruzar limites do sistema de arquivos
  4. Continuam funcionando mesmo que o arquivo original seja excluído ou movido
  5. As alterações no conteúdo são refletidas em todos os hard links

Symbolic Links:

  1. Têm seu próprio inode, diferente do arquivo de destino
  2. Podem linkar para diretórios
  3. Podem cruzar limites do sistema de arquivos
  4. Tornam-se quebrados se o arquivo de destino for excluído ou movido
  5. São essencialmente arquivos ponteiros que contêm o caminho para o destino

Vamos demonstrar algumas dessas diferenças com exemplos:

Primeiro, vamos tentar criar um hard link para um diretório, o que não é permitido:

mkdir testdir
ln testdir testdir_hardlink

Você deve ver uma mensagem de erro como:

ln: testdir: hard link not allowed for directory

Agora, vamos tentar criar um symbolic link para um diretório, o que é permitido:

ln -s testdir testdir_symlink

Vamos verificar nosso symbolic link de diretório:

ls -la

Você deve ver testdir_symlink -> testdir na saída, indicando que testdir_symlink é um symbolic link para testdir.

Podemos criar um arquivo dentro do diretório original:

echo "This is a test file in the directory." > testdir/testfile.txt

E acessá-lo através do symbolic link:

cat testdir_symlink/testfile.txt

Você deve ver o conteúdo:

This is a test file in the directory.

Isso demonstra que symbolic links podem apontar para diretórios e ser usados para acessar seus conteúdos.

Outra diferença importante é que a exclusão do arquivo original quebra um symbolic link, mas não um hard link. Já vimos isso com nosso exemplo de symbolic link. Vamos demonstrar isso com nosso hard link:

rm original.txt
cat hardlink.txt

Você ainda deve ver todas as quatro linhas:

This is the original file for our link examples.
This is an added line.
Another line added through the hard link.
This line was added through the symbolic link.

O hard link continua funcionando porque os dados ainda existem no disco, e o hard link ainda aponta para esses dados.

No entanto, nosso symbolic link agora está quebrado:

ls -l symlink.txt
cat symlink.txt

Você deve ver que symlink.txt ainda existe, mas aponta para um arquivo que não existe mais, e tentar lê-lo produz um erro.

Vamos recriar o arquivo original a partir do nosso hard link:

cp hardlink.txt original.txt
cat symlink.txt

O symbolic link funciona novamente porque o arquivo para o qual ele aponta existe mais uma vez.

Resumo

Neste laboratório, você aprendeu sobre os dois tipos de links no Linux: hard links e symbolic links (soft links). Você praticou a criação desses links usando o comando ln e explorou suas principais diferenças.

Pontos-chave abordados neste laboratório:

  1. Hard Links:

    • Criados usando o comando ln sem opções
    • Compartilham o mesmo inode que o arquivo original
    • Não podem linkar para diretórios ou cruzar limites do sistema de arquivos
    • Continuam funcionando mesmo que o arquivo original seja excluído
    • As alterações no conteúdo são refletidas em todos os hard links
  2. Symbolic Links:

    • Criados usando o comando ln -s
    • Têm seu próprio inode, diferente do arquivo de destino
    • Podem linkar para diretórios e cruzar limites do sistema de arquivos
    • Tornam-se quebrados se o arquivo de destino for excluído ou movido
    • São arquivos ponteiros que contêm o caminho para o destino
  3. Aplicações Práticas:

    • Links são úteis para criar atalhos para arquivos e diretórios
    • Eles podem ser usados para manter múltiplas versões de arquivos
    • Administradores de sistema usam links para gerenciamento de configuração
    • Links ajudam na organização de arquivos sem duplicar dados

Compreender como criar e usar links de forma eficaz é uma habilidade essencial para usuários Linux. Essas ferramentas permitem um gerenciamento e organização eficientes de arquivos dentro de um sistema de arquivos Linux.