Symlink до частини файлу?


14

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


4
Можливо, якщо ви поясните мету того, що ви намагаєтеся зробити, ми могли б запропонувати рішення.
JRT

Відповіді:



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, щоб створити та отримати доступ до циклічного пристрою.

Якщо вам потрібна символьна посилання, ви можете створити таке, яке вказує на циклічний пристрій.


2

Це може бути можливим (створити звичайне символьне посилання, що вказує на частину файлу) у файловій системі, яка реалізує ідею "файл як каталог" , яка з'явилася - окрім інших авторів - у планах по рейзерфі , але реалізація рейзерфів не сподобався через проблеми, які викликала реалізація.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.