Como um symlink é representado em um sistema de arquivos versus um hard link?

4

Eu quero ter certeza de que minha compreensão disso está correta:

  • Criando um link físico é criado outro dentry que aponta para o mesmo inode
  • Criar um link simbólico está criando um objeto / inode de arquivo completamente novo que aponta ao dentry do outro inode. O sistema de arquivos trata esse arquivo de uma maneira especial (redirecionando certas operações para o dentry do outro inode)
por user1028270 15.02.2016 / 22:54

1 resposta

6

Corrija para um link físico, mas não para um link simbólico. O conteúdo de um link simbólico é apenas uma string. Isso permite que um link simbólico aponte para um sistema de arquivos que não está atualmente montado, por exemplo. Um link simbólico é apenas texto; quando o kernel encontra um, ele essencialmente insere o link simbólico no caminho que estava procurando, dividindo-o em partes delimitadas por barra e procurando . e .. conforme apropriado. Os links simbólicos não dão permissão extra: as travessias causadas pelos elementos de caminho que vêm do link simbólico obedecem às mesmas restrições de permissão como se o aplicativo tivesse especificado esses elementos de caminho. Um link simbólico tem seu próprio inode (ou, pelo menos, aparece dessa maneira - sob alguns capítulos, alguns sistemas de arquivos não permitem que links simbólicos tenham vários links físicos e armazenem os links simbólicos diretamente no diretório que os contém, mas ainda relata um inode número para a função lstat ).

No nível do sistema, como os links simbólicos são tratados depende do tipo de operação. As operações que atuam nas entradas de diretório (por exemplo, renomear, excluir) tratam links simbólicos como qualquer outro arquivo. As operações que atuam no conteúdo do arquivo (por exemplo, open , chdir ) seguem o link simbólico e agem no destino (e relatam um erro se a cadeia de links simbólicos terminar com um link corrompido). Para operações que atuam nos metadados do arquivo (isto é, no inode), isso depende: para algumas operações, há um par de funções (por exemplo, stat / lstat ), para outras o symlink é seguido (por exemplo, chmod , utimes não tem uma variante do symlink no Linux).

    
por 16.02.2016 / 01:24