Что-то вроде символически связанного файла, но с привязанными данными изменения?

Есть ли тип файла или метод для использования файлов, в которых определенные файлы выглядят и ведут себя как символически связанные файлы, но содержат дополнительную метаинформацию для изменения данных при их чтении?

Например:
Если у меня есть файл hello-world.txt , и я создаю символически связанный файл, указывающий на него,

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

Я не могу изменить содержимое symlink без изменения hello-world.txt , а также изменить все другие файлы, которые указывают на hello-world.txt . Я понимаю, что символически / жестко связанные файлы, как предполагается, остаются теми же (потому что они являются одним и тем же файлом в некотором смысле), но было бы здорово, если бы я мог написать файл, который ссылается на конкретный файл, а затем также предоставляет сведения об изменении которые применяются при каждом чтении файла.

Я попытался создать свой собственный тип файла, используя обычный текст, который выглядит так:

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

Затем я предоставил этим файлам собственное расширение файла и тип mime и создаю промежуточную программу для перенаправления на указанный файл и в основном попытаюсь имитировать поведение символической ссылки. Проблема заключается в том, что файл не «действительно» ссылается на другой файл, и поэтому на самом деле чтение файла (с помощью команды cat или с приложением процессора c ++ в файле и т. Д.) Не получит той же информации, что и символически связанный файл. Я не уверен, могу ли я обеспечить крючок для такого рода вещей, и программа выводит правильный текст для того, что его читает. Может быть, что-то с файлами с каналами? Я не знаю.

Какой был бы лучший способ добиться такого поведения в файловой системе?

Возможно, аналогия, которая наилучшим образом описывает типы динамических возможностей, которые я хочу иметь, – это то, как файлы php работают в Интернете. В тот же файл можно ссылаться с использованием дополнительных параметров, и это изменяет содержимое файла, прочитанного пользователем.

  • Скопировать символическую ссылку И где она указывает на использование rsync
  • Предоставление / bin и / lib внутри chroot тюрьмы
  • Git не перезаписывает символическую директорию при проверке филиала
  • Автоматическое добавление косой черты при навигации по символической ссылке
  • Файловая система Docker - совместимость с символическими ссылками
  • Как следовать символическим ссылкам в NFS?
  • Как связать папку для создания ярлыка
  • Используйте `ln` для создания отсутствующего каталога
  • 2 Solutions collect form web for “Что-то вроде символически связанного файла, но с привязанными данными изменения?”

    Возможно, вы сможете создать это с помощью FUSE или одной из систем наложения, таких как UnionFS. Я не думаю, что это можно сделать без драйвера файловой системы или для того, чтобы каждая программа, которая обращается к нему, использует LD_PRELOAD для изменения поведения read ().

    Существует несколько возможных проблем с реализацией:

    • чтобы применить изменения, вы должны прочитать оба файла и как-то сохранить промежуточную информацию; http://en.wikipedia.org/wiki/Rope_%28data_structure%29 может помочь, но что, если базовый файл и файл изменений имеют размер как несколько Gb? Кроме того, это остановит программу, которая откроет файл во время применения изменений.

    • что произойдет, если основной файл изменится таким образом, что инструкции изменений больше не применяются?

    • на самом деле, что произойдет, если основной файл вообще изменится?

    • что произойдет, если вы попытаетесь записать в исправленный файл?

    Возможно, вы сможете сделать что-то подобное с помощью patch . «Симлинк» тогда будет в основном быть shellscript, который читает оригинал и применяет патчи. Но я не слышал ничего готового, который делает то, что вы хотите; если кто-нибудь еще придумает это, мне будет очень интересно. В противном случае это было бы интересное упражнение по программированию.

    Linux и Unix - лучшая ОС в мире.