GNU tarの--dereferenceオプションがシンボリックリンクを逆参照しないのはなぜですか?

GNU tarの--dereferenceオプションがシンボリックリンクを逆参照しないのはなぜですか?

私はGNU tar -h(別名)の--dereference仕組みを知っていると思いましたが、今は混乱しています。

考慮する:

$ tree dir/
dir/
├── file
└── link -> file

1 directory, 2 files

これをtarコマンドに追加すると、-h2つのファイルエントリを持つアーカイブを取得する必要がありますか? 1つはname file、もう1つはname、linkそれぞれ同じ内容を持っていますか?代わりにfile期待どおりにアーカイブしましたが、アーカイブのシンボリックリンクエントリはlink次を指しますfile

$ tar cf archive -h dir
$ tar tvf archive
drwxr-xr-x bspencer/bspencer 0 2024-01-12 15:36 dir/
-rw-r--r-- bspencer/bspencer 13 2024-01-12 15:41 dir/file
hrw-r--r-- bspencer/bspencer  0 2024-01-12 15:41 dir/link link to dir/file

-hこのオプションは、アーカイブにシンボリックリンクエントリが生成されるのを防ぎますか?

$ man tar |grep -A1 -- --dereference 
       -h, --dereference
              Follow symlinks; archive and dump the files they point to.

従来の文字の代わりに--dereference使用する場合など、パラメータに長い名前を使用すると同じ結果が得られます。--create

$ tar --version |head -1
tar (GNU tar) 1.34

答え1

次の出力にもかかわらず、Tarはリンクではなく個々のファイルを含むようにこれらのアーカイブを正しく拡張しますtar tvf

$ tree dir
dir
├── file
└── link -> file

1 directory, 2 files
$ tar cf archive -h dir
$ tar tvf archive
drwxr-xr-x bspencer/bspencer 0 2024-01-16 12:26 dir/
-rw-r--r-- bspencer/bspencer 9 2024-01-16 12:26 dir/file
hrw-r--r-- bspencer/bspencer 0 2024-01-16 12:26 dir/link link to dir/file
$ mkdir out
$ cd out && tar xvf ../archive
dir/
dir/file
dir/link
$ tree
.
└── dir
    ├── file
    └── link

2 directories, 2 files
$ ls -l dir
total 8
-rw-r--r-- 2 bspencer bspencer 9 Jan 16 12:26 file
-rw-r--r-- 2 bspencer bspencer 9 Jan 16 12:26 link

したがって、tarはうまく動作します。

私はこれがtar tvfアーカイブの内容を確実に示すだろうと間違って考えました。代わりに、アーカイブが実際の個々のファイルを含むように拡張されていても、「リンク済み」と表示されます。

しかし、tar tvf出力がリンクについて話す理由についての私の考えは、tarがスペースを節約するためにファイルの内容をリンクとして保存し、拡張時に別々のファイルとして生成されることを示すことです。ただし、何らかの理由でtar tvfこれは表示されず、実際の内部ストレージのみが表示されます。

関連情報