Czy można utworzyć plik, który jest tylko podsekwencją bajtów z innego pliku, na przykład dowiązania symbolicznego, ale odwołując się tylko do części pliku?
Czy można utworzyć plik, który jest tylko podsekwencją bajtów z innego pliku, na przykład dowiązania symbolicznego, ale odwołując się tylko do części pliku?
Odpowiedzi:
Nie. Musisz odwołać się do całego pliku lub skopiować część pliku, która Cię interesuje.
Tak, jest to (nieco) możliwe przynajmniej w Linuksie z pewnymi ograniczeniami.
Metoda polega na utworzeniu urządzenia do odczytu i zapisu w pętli, które mapuje na podzbiór pliku.
na przykład:
#!/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
wynik:
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
Uważam, że zarówno przesunięcie, jak i rozmiar muszą być wielokrotnością rozmiaru bloku (512 bajtów).
Prawdopodobnie musisz być rootem, aby utworzyć urządzenie pętli i uzyskać do niego dostęp.
Jeśli potrzebujesz dowiązania symbolicznego, możesz utworzyć takie, które wskazuje urządzenie pętli.
Może być możliwe (utworzenie normalnego dowiązania symbolicznego wskazującego na część pliku) w systemie plików, który implementuje ideę „plik jako katalog” , która pojawiła się - oprócz innych autorów - w planach dla reiserfs , ale implementacja reiserfs nie podobało się to z powodu problemów spowodowanych przez wdrożenie.