他のファイルのバイトサブシーケンスですが、ファイルの一部のみを参照するファイル(シンボリックリンクなど)を作成することは可能ですか?
答え1
はい、少なくともLinuxではある程度可能ですが、いくつかの制限があります。
方法は、ファイルのサブセットにマップされる読み取り/書き込みループデバイスを作成することです。
たとえば、
# Write some data to a single file
for ((i=0;i<10000;i++)); do
printf "%7d\n" $i
done >/var/tmp/file
# Use losetup to manage a new loopback device
# The --find option without any arguments to find an available loop device
# The --show will echo what that found device is to stdout
# We capture this to ensure the rest of the script refers to the correct device
NEW_DEV_LOOP=$(sudo losetup --show --verbose --find --show --offset 512 --sizelimit 512 /var/tmp/file)
# This will be something like /dev/loop3 depending on what devices are available
echo "NEW_DEV_LOOP = $NEW_DEV_LOOP"
# Print status
losetup -a
# Show the contents of the file and loop device
head -2 /var/tmp/file
echo ...
tail -2 /var/tmp/file
echo "==="
sudo head -2 "$NEW_DEV_LOOP"
echo ...
sudo tail -2 "$NEW_DEV_LOOP"
# Write to the loop device and show impact on the file
sudo sh -c "printf 'I was here' > '$NEW_DEV_LOOP'"
grep here /var/tmp/file
# Detatch the example loop device
sudo losetup -d "$NEW_DEV_LOOP"
出力:
NEW_DEV_LOOP=/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バイト)の倍数でなければならないと思います。
ループデバイスを作成してアクセスするには、ルートである必要があります。
シンボリックリンクが必要な場合は、ループデバイスへのシンボリックリンクを作成できます。
答え2
カント。ファイル全体を引用するか、ファイルから関心のある部分をコピーする必要があります。
答え3
次の機能を実装するファイルシステムで可能です(ファイルの一部を指す一般的なシンボリックリンクの生成)。「ファイルはディレクトリだ」という考え、彼は他の作家の間でreiserfsプランしかし、reiserfsの実装気に入らない実装プロセスで発生する問題を解決します。