Можно ли создать файл, который представляет собой лишь подпоследовательность байтов из другого файла, например символическую ссылку, но ссылающуюся только на часть файла?
Можно ли создать файл, который представляет собой лишь подпоследовательность байтов из другого файла, например символическую ссылку, но ссылающуюся только на часть файла?
Ответы:
Нет. Вы должны либо сослаться на весь файл, либо скопировать ту часть файла, которая вас интересует.
Да, это (в некоторой степени) возможно по крайней мере в Linux с некоторыми ограничениями.
Метод заключается в создании устройства цикла чтения-записи, которое сопоставляется с подмножеством файла.
например:
#!/bin/bash
for ((i=0;i<10000;i++)); do
printf "%7d\n" $i
done >/var/tmp/file
losetup -v -f -o 512 --sizelimit 512 /var/tmp/file
losetup -a
head -2 /var/tmp/file
echo ...
tail -2 /var/tmp/file
echo ===
head -2 /dev/loop0
echo ...
tail -2 /dev/loop0
printf "I was here" > /dev/loop0
grep here /var/tmp/file
losetup -d /dev/loop0
выход:
loop device: /dev/loop0
/dev/loop0: [0808]:136392 (/var/tmp/file), offset 512, size 512
0
1
...
9998
9999
===
64
65
...
126
127
I was here 65
Я считаю, что и смещение, и размер должны быть кратны размеру блока (512 байт).
Вы, вероятно, должны быть пользователем root, чтобы создать и получить доступ к устройству цикла.
Если вам нужна символическая ссылка, вы можете создать ссылку, которая указывает на устройство цикла.
Это может быть возможно (создать обычную символическую ссылку, указывающую на часть файла) в файловой системе, которая реализует идею «файл как каталог» , которая появилась - помимо других авторов - в планах reiserfs , но реализация reiserfs не нравились проблемы, вызванные реализацией.