Muitas pessoas já me perguntaram qual é a diferença entre um hard link e um link simbólico. No intuito de elucidar este duradouro mistério sobre a natureza do Unix, apresento-vos este singelo post.
No Unix, cada arquivo é associado a um inode. O inode é uma estrutura que contém diversas meta-informações sobre o arquivo, tais como seu tamanho, dono, grupo, permissões, datas de acesso e modificação, e ponteiros para o conteúdo do arquivo do disco. O inode, entretanto, não contém o nome do arquivo. Cada inode possui um número que o identifica dentro de um dado sistema de arquivos.
Um diretório é um arquivo que contém uma lista de nomes de arquivos e os números de seus respectivos inodes. Cada entrada dessa lista é um hard link para o arquivo em questão. É possível que haja mais de uma entrada, no mesmo diretório ou não, para o mesmo arquivo; o inode contém uma contador de referências (o valor na segunda coluna do ls -l, conhecido como link count), que indica quantas entradas apontam para ele. Enquanto houver referências para o arquivo, ele continuará existindo, mesmo que a referência "original" seja apagada. Apenas quando o contador de referências atingir zero (e nenhum processo estiver com o arquivo aberto), ele será removido do sistema de arquivos. Isso explica por que a syscall que "apaga" um arquivo no Unix se chama unlink.
Enquanto um hard link é uma referência direta ao arquivo, um link simbólico, ou symlink, é uma referência a um nome de arquivo. Essencialmente, um symlink é como um "atalho" em um suposto sistema operacional, com a diferença de que o symlink é tratado transparentemente pelo sistema. Se a entrada para a qual um symlink aponta for apagada, o symlink fica quebrado. É possível criar symlinks entre sistemas de arquivos (pois apenas o nome é usado), mas não um hard link (pois o inode deve estar no mesmo sistema de arquivos que a referência).
Uma observação interessante é que o link count de um diretório é igual ao número de subdiretórios que possui mais 2. Isso acontece porque, além da entrada no diretório que o contém, o diretório contém uma entrada . apontando para si mesmo, e cada subdiretório possui uma entrada .. apontando para o diretório pai. A maior parte dos sistemas não permite a criação de novos hard links para um diretório, para evitar ciclos na "árvore" de diretórios.
E termina assim o conto.
Copyright © 2010-2024 Vítor De Araújo
O conteúdo deste blog, a menos que de outra forma especificado, pode ser utilizado segundo os termos da licença Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.
Powered by Blognir.