Um link simbólico é um pequeno arquivo que contém a localização (ou seja, caminho e nome do arquivo) de um arquivo de destino, com um sinalizador na entrada do diretório indicando que é um link simbólico.
Quando você abre um link simbólico, o sistema operacional segue o local para encontrar o arquivo de destino. Se o próprio destino for um link simbólico, ele segue sua localização (1) (2) até que o local aponte para um arquivo que não é um link simbólico (vamos chamá-lo de FinalFile ). Em seguida, o sistema operacional obtém o inode do FinalFile (o inode contém metadados como tempo de modificação e também possui um ponteiro para os dados do arquivo). Finalmente, o inode do FinalFile é aberto. A partir de agora, o processo usa esse inode para ler / gravar no arquivo. Como resultado, alterando o nome ou caminho do link simbólico, excluindo o link simbólico, alterando o caminho ou o nome do FinalFile ou mesmo excluindo o FinalFile(3) não tem efeito no processo; ainda está lendo do mesmo inode.
Na maioria dos casos, as operações de dados de arquivo no link simbólico afetarão o FinalFile (por exemplo, a leitura e gravação no link simbólico lerá / gravará no FinalFile ), mas há exceções: a readlink()
chamada do sistema lê o conteúdo do link simbólico.
As operações de metadados de arquivo (como renomear ou excluir), por outro lado, geralmente afetam o link simbólico. Mas também há exceções aqui: a lstat()
chamada do sistema é semelhante stat()
, exceto pelo fato de retornar informações no próprio link simbólico, e não no FinalFile (2).
(1) Há um limite no número de níveis e as coisas ficam um pouco mais complexas se o local no link simbólico for um caminho relativo.
(2) Leia o link simbólico (7): manipulação simbólica de links para obter mais detalhes.man 7 symlink
(3) O rm
comando ou a unlink()
chamada do sistema não remove fisicamente um arquivo. Ele remove a entrada de diretório que aponta para o inode do arquivo. O arquivo em si será removido apenas se ambos: a) não houver mais entradas de diretório (links físicos) que se refiram ao seu inode eb) nenhum processo tiver o arquivo aberto.