Algo semelhante a um arquivo vinculado simbolicamente, mas com detalhes de alteração anexados?

2

Existe um tipo de arquivo ou método para usar arquivos nos quais certos arquivos se parecem e se comportam como arquivos simbolicamente vinculados, mas contêm meta informações extras para alterar os dados quando eles são lidos?

Por exemplo:
Se eu tiver um arquivo chamado hello-world.txt e eu criar um arquivo simbolicamente vinculado apontando para ele,

ln -s /path/to/hello-world.txt /path/to/symlink

Não consigo alterar o conteúdo do symlink sem alterar hello-world.txt , além de alterar todos os outros arquivos que apontam para hello-world.txt . Eu percebo que arquivos simbolicamente / hard link devem permanecer os mesmos (porque eles são o mesmo arquivo em um sentido), mas seria ótimo, se eu pudesse escrever um arquivo que referencia um arquivo em particular, e também fornecer detalhes de alteração que são aplicados toda vez que o arquivo é lido.

Eu tentei criar meu próprio tipo de arquivo usando texto simples que se parece com isso:

/path/to/file/being/referenced
change statement
change statement
...

Em seguida, daria a esses arquivos sua extensão de arquivo e tipo mime e crie um programa intermediário para redirecionar para o arquivo referenciado, e basicamente tente imitar o comportamento de um link simbólico. O problema é que o arquivo não "realmente" faz referência a outro arquivo e, assim, ler o arquivo (usando o comando cat, ou ter um processador c ++ puxando o arquivo, etc), não obterá as mesmas informações de volta um arquivo simbolicamente vinculado seria. Eu não tenho certeza se eu posso fornecer um gancho para esse tipo de coisa, e ter um programa de saída do texto correto para o que está lendo. Talvez algo com arquivos canalizados? Não sei.

Qual seria a melhor maneira de obter esse tipo de comportamento no sistema de arquivos?

Talvez uma analogia que melhor descreve o tipo de capacidade dinâmica que eu quero que os arquivos tenham, é como os arquivos php funcionam na web. O mesmo arquivo pode ser referenciado usando parâmetros adicionais e isso altera o conteúdo de um arquivo lido pelo usuário.

    
por Trevor Hickey 03.02.2014 / 14:58

2 respostas

3

Você pode criar isso com o FUSE ou com um dos sistemas de sobreposição, como o UnionFS. Eu não acho que isso pode ser feito sem um driver de sistema de arquivos ou fazendo com que cada programa que o acessa use hacks LD_PRELOAD para modificar o comportamento de read ().

Existem vários problemas de implementação prováveis:

  • para aplicar as alterações, você precisa ler os dois arquivos e armazenar o intermediário de alguma forma; O link pode ajudar, mas e se o arquivo base e o arquivo de alterações tiverem vários GB em tamanho? Além disso, isso interromperá o programa que abre o arquivo enquanto você aplica as alterações.

  • o que acontece se o arquivo subjacente mudar de tal forma que as instruções de alteração não se apliquem mais?

  • na verdade, o que acontece se o arquivo subjacente mudar de alguma forma?

  • o que acontece se você tentar gravar no arquivo corrigido?

por 03.02.2014 / 15:36
1

Você pode fazer algo assim usando patch . O "symlink" seria basicamente um shellscript que lê o original e aplica os patches. Mas eu não ouvi nada pronto que faz o que você quer; se alguém mais aparecer, eu ficaria muito interessado. Caso contrário, seria um exercício interessante de programação.

    
por 03.02.2014 / 15:18