Sobes.tech
Junior

O que é um link simbólico?

sobes.tech IA

Resposta da IA

Um link simbólico (ou symlink) é um tipo especial de arquivo no sistema operativo que aponta para outro arquivo ou diretório. Funciona como um atalho.

Características principais:

  • Contém o caminho: O link simbólico contém uma cadeia de texto que é o caminho para o arquivo ou diretório de destino. Quando se acede ao link, o sistema segue esse caminho.
  • Não contém dados: O link em si não contém dados do arquivo de destino. O seu tamanho costuma ser pequeno e depende do comprimento do caminho.
  • Independência da partição: O arquivo ou diretório de destino pode estar noutra partição ou mesmo num sistema de ficheiros diferente do link.
  • Links partidos: Se o arquivo ou diretório de destino for eliminado, o link simbólico torna-se "partido" (broken) ou "pendurado" (dangling), mas o próprio link continua a existir.
  • Suporte: É suportado pela maioria dos sistemas operativos modernos (Linux, macOS, Windows com NTFS).

Comparação com link físico (hard link):

Critério Link simbólico Link físico
Tipo de arquivo Tipo de arquivo separado Link adicional ao inode
Caminho Guarda o caminho para o destino Não guarda o caminho
Partição/Sistema de ficheiros Pode apontar para outra partição/SF Deve estar na mesma partição/SF
Eliminação do destino O link fica partido Os dados estão acessíveis através de outros links
A diretórios Pode apontar para diretórios Geralmente, não pode apontar para diretórios

Em Java, trabalhar com links simbólicos é feito através da API java.nio.file.

// Exemplo de criação de um link simbólico
import java.io.IOException;
import java.nio.file.*;

public class SymlinkExample {

    public static void main(String[] args) {
        Path target = Paths.get("target_file.txt"); // Ficheiro de destino
        Path link = Paths.get("mylink_to_target"); // Nome do link simbólico

        try {
            // Criar o ficheiro de destino (para exemplo)
            Files.write(target, "Hello, World!".getBytes());

            // Criar o link simbólico
            Files.createSymbolicLink(link, target);
            System.out.println("Link simbólico criado: " + link.toAbsolutePath());

            // Verificar se o caminho é um link simbólico
            System.out.println(link.getFileName() + " é um link simbólico: " + Files.isSymbolicLink(link));

            // Ler conteúdo através do link
            byte[] content = Files.readAllBytes(link);
            System.out.println("Conteúdo através do link: " + new String(content));

            // Resolver o link para obter o caminho ao ficheiro de destino
             Path resolvedTarget = Files.readSymbolicLink(link);
             System.out.println("Caminho do destino do link: " + resolvedTarget);

        } catch (IOException e) {
            e.printStackTrace();
         } finally {
             // Eliminar os ficheiros criados para limpeza
             try {
                 Files.deleteIfExists(link);
                 Files.deleteIfExists(target);
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
    }
}