Ist es möglich, eine Datei zu erstellen, die nur eine Teilsequenz von Bytes aus einer anderen Datei ist, z. B. ein Symlink, der jedoch nur auf einen Teil der Datei verweist?
Ist es möglich, eine Datei zu erstellen, die nur eine Teilsequenz von Bytes aus einer anderen Datei ist, z. B. ein Symlink, der jedoch nur auf einen Teil der Datei verweist?
Antworten:
Nein. Sie müssen entweder auf die gesamte Datei verweisen oder den Teil der Datei kopieren, an dem Sie interessiert sind.
Ja, zumindest unter Linux ist dies mit einigen Einschränkungen (einigermaßen) möglich.
Die Methode besteht darin, eine Lese- / Schreibschleife zu erstellen, die einer Teilmenge der Datei zugeordnet ist.
z.B:
#!/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
Ausgabe:
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
Ich glaube, sowohl der Offset als auch die Größe müssen ein Vielfaches einer Blockgröße (512 Bytes) sein.
Sie müssen wahrscheinlich root sein, um das Loop-Gerät zu erstellen und darauf zuzugreifen.
Wenn Sie einen Symlink benötigen, können Sie einen erstellen, der auf das Loop-Gerät verweist.
Es könnte möglich sein (einen normalen Symlink zu erstellen, der auf einen Teil einer Datei verweist), auf einem Dateisystem, das die Idee "Datei als Verzeichnis" implementiert , die - neben anderen Autoren - in den Plänen für reiserfs , aber in der Implementierung von reiserfs vorkommt wurde nicht für die Probleme gemocht, die die Implementierung verursachte.