Чи можливо створити файл, який є лише підпослідовністю байтів з іншого файлу, як-от символьне посилання, але посилається лише на частину файлу?
Чи можливо створити файл, який є лише підпослідовністю байтів з іншого файлу, як-от символьне посилання, але посилається лише на частину файлу?
Відповіді:
Ні. Ви повинні або посилатися на весь файл, або потрібно скопіювати частину файлу, який вас цікавить.
Так, це (дещо) можливо принаймні на 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, щоб створити та отримати доступ до циклічного пристрою.
Якщо вам потрібна символьна посилання, ви можете створити таке, яке вказує на циклічний пристрій.
Це може бути можливим (створити звичайне символьне посилання, що вказує на частину файлу) у файловій системі, яка реалізує ідею "файл як каталог" , яка з'явилася - окрім інших авторів - у планах по рейзерфі , але реалізація рейзерфів не сподобався через проблеми, які викликала реалізація.