Além de todas as outras respostas, quero destacar as seguintes propriedades importantes:
Um softlink é uma referência verdadeira, ou seja, é um arquivo pequeno que contém um nome de caminho. A resolução de um vínculo virtual acontece de maneira transparente com o aplicativo: se um processo abrir um arquivo, diga /this/path/here
qual é um link simbólico apontando para /that/other/path
, todo o tratamento da abertura /that/other/path
é feito pelo sistema operacional. Além disso, se /that/other/path
for um link simbólico, isso também está sendo tratado pelo sistema operacional. De fato, o sistema operacional segue a cadeia de links simbólicos até encontrar outra coisa (por exemplo, um arquivo comum) ou até atingir SYMLOOP_MAX
(ver sysconf(3)
) muitas entradas; nesse caso, o sistema operacional (mais precisamente: a chamada do sistema) retorna um erro e define errno
para ELOOP
. Assim, uma referência circular como xyz -> xyz
não irá parar o processo. (Para sistemas Linux, veja path_resolution(7)
detalhes completos.)
Observe que um processo pode verificar se um nome de caminho é um link simbólico ou não através do uso de lstat(2)
e pode modificar seus atributos de arquivo (armazenados na tabela de inodes) por meio de lchown(2)
outros (veja symlink(7)
a história completa).
Agora, em termos de permissão, você notará que os links simbólicos sempre têm permissões 777 ( rwxrwxrwx
em notação simbólica). Isso se deve ao fato de que qualquer outra permissão pode ser ignorada acessando o arquivo real, de qualquer maneira. Por outro lado, o 777 para um link simbólico não torna o arquivo vinculado acessível se não estiver acessível em primeiro lugar. Por exemplo, um link simbólico com permissões 777 apontando para um arquivo com permissões 640 não torna o arquivo acessível para "outro" (público em geral). Em outras palavras, um arquivo pode xyz
ser acessado através de um link simbólico, se e somente se estiver diretamente acessível, ou seja, sem indicação indireta. Portanto, as permissões do link simbólico não têm nenhum efeito de segurança.
Uma das principais diferenças visíveis entre links físicos e links simbólicos (também conhecidos como links flexíveis) é que os links simbólicos funcionam nos sistemas de arquivos, enquanto os links físicos estão confinados a um sistema de arquivos. Ou seja, um arquivo na partição A pode ser vinculado a partir da partição B, mas não pode ser vinculado a partir daí. Isso fica claro pelo fato de que um hardlink é realmente uma entrada em um diretório, que consiste em um nome de arquivo e um número de inode, e que os números de inode são exclusivos apenas por sistema de arquivos.
O termo hardlink é realmente um tanto enganador. Embora a origem e o destino dos links simbólicos sejam claramente distinguíveis (o link simbólico tem sua própria entrada na tabela de inodes), isso não é verdade para os links físicos. Se você criar um hardlink para um arquivo, a entrada original e o hardlink serão indistinguíveis em termos do que estava lá primeiro. (Como eles se referem ao mesmo inode, eles compartilham seus atributos de arquivo, como proprietário, permissões, carimbos de data e hora, etc.) Isso leva à afirmação de que toda entrada de diretório é na verdade um link físico e que vincular um arquivo significa apenas criar um segundo ( ou terceiro ou quarto ...) hardlink. De fato, cada inode armazena um contador para o número de hardlinks para esse inode.
Por fim, observe que usuários comuns podem não vincular diretórios. Isso ocorre porque isso deve ser feito com extrema cautela: um usuário incauto pode introduzir ciclos na árvore de arquivos estritamente hierárquica, com a qual todas as ferramentas usuais (como fsck
) e o próprio sistema operacional não estão preparados para lidar.