Симлинк на часть файла?

14

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

Застенчивый мальчик
источник
4
Возможно, если вы объясните цель того, что вы пытаетесь сделать, мы могли бы предложить решение.
JRT

Ответы:

12

Нет. Вы должны либо сослаться на весь файл, либо скопировать ту часть файла, которая вас интересует.

Игнасио Васкес-Абрамс
источник
12

Да, это (в некоторой степени) возможно по крайней мере в 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, чтобы создать и получить доступ к устройству цикла.

Если вам нужна символическая ссылка, вы можете создать ссылку, которая указывает на устройство цикла.

jlliagre
источник
2

Это может быть возможно (создать обычную символическую ссылку, указывающую на часть файла) в файловой системе, которая реализует идею «файл как каталог» , которая появилась - помимо других авторов - в планах reiserfs , но реализация reiserfs не нравились проблемы, вызванные реализацией.

imz - Иван Захарящев
источник