È possibile creare un file che è solo una sottosequenza di byte da un altro file, come un collegamento simbolico, ma facendo riferimento solo a una parte del file?
È possibile creare un file che è solo una sottosequenza di byte da un altro file, come un collegamento simbolico, ma facendo riferimento solo a una parte del file?
Risposte:
No. Devi fare riferimento all'intero file oppure copiare la parte del file che ti interessa.
Sì, è (un po ') possibile almeno su Linux con alcune limitazioni.
Il metodo consiste nel creare un dispositivo di loop di lettura / scrittura mappato a un sottoinsieme del file.
per esempio:
#!/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
produzione:
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
Credo che sia l'offset sia la dimensione debbano essere multipli di una dimensione di blocco (512 byte).
Probabilmente devi essere root per creare e accedere al dispositivo loop.
Se è necessario un collegamento simbolico, è possibile crearne uno che punti al dispositivo loop.
Potrebbe essere possibile (creare un normale link simbolico che punta a una parte di un file) su un filesystem che implementa l'idea di "file come directory" , che è apparsa - oltre ad altri autori - nei piani per reiserfs , ma l'implementazione di reiserfs non è piaciuto per i problemi causati dall'implementazione.