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/herequal é 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/pathfor 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 errnopara ELOOP. Assim, uma referência circular como xyz -> xyznã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 ( rwxrwxrwxem 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 xyzser 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.