tarが実際にXZ_OPTをxzに渡すかどうかはどうすればわかりますか?

tarが実際にXZ_OPTをxzに渡すかどうかはどうすればわかりますか?

私は何をしていますか:

XZ_OPT='-T0 -9 -vv' tar -vvcJf ~/backup.tar.xz ...FILES

与えられたオプションが実際に合格したかどうか疑わしいですtar。以下を試しました。

  1. -vv使用しましたが、XZ_OPT出力にメッセージがありません。xz--verbose
  2. また、他のプロセスがあるかどうかをps aux | grep xz確認しましたが、どのプロセスも作成されているのを見ませんでした。tarspawnxztar

質問

  1. 環境は実際に動作しますかXZ_OPT?これを確認する方法は?
  2. 実行中にxzプロセスが見つからないのはなぜですかtartar実際にファイルを圧縮するプロセスはありますか?

環境

$ xz --version
xz (XZ Utils) 5.2.5
liblzma 5.2.5
$ tar --version
bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.6

答え1

  1. 環境は実際に動作しますかXZ_OPT?これを確認する方法は?

間違ったコンテンツを配信してください。

% XZ_OPT='--this-wont-work' tar -cJf foo.tar.xz foo
xz: unrecognized option '--this-wont-work'
xz: Try `xz --help' for more information.
tar: foo.tar.xz: Cannot write: Broken pipe
tar: Child returned status 1
tar: Error is not recoverable: exiting now
  1. xztarの実行中にプロセスが見つからないのはなぜですか?tar実際にファイルを圧縮するプロセスはありますか?

上記の出力を見ると、実際にそうです。プロセスが持続するようにアーカイブを作成するのに時間がかかりますか?ps aux | grep xzどちらもpgrep -fa xz私にその過程を示しました。xz


tar呼び出すプログラムの出力は、失敗しない限り表示されない可能性があります。そうしないと、意図しない出力に制御できないノイズが追加される可能性がありますtar

答え2

ほとんどのシェルで使用される構文は、この環境変数を生成して「エクスポート」します。それ以降はtar以外環境から明示的に削除、すべてのサブルーチンでこれを見ることができます。

ある程度効果はあると思います。これを以下と比較してみてください。

$ XZ_OPT='-T0 -9 -vv' tar -cJf junk.tar.xz ~/.config
tar: Removing leading `/' from member names
xz: Filter chain: --lzma2=dict=64MiB,lc=3,lp=0,pb=2,mode=normal,nice=64,mf=bt4,depth=0
xz: Using up to 4 threads.
xz: 4,997 MiB of memory is required. The limiter is disabled.
xz: Decompression will need 65 MiB of memory.
  100 %   2,541.8 KiB / 5,930.0 KiB = 0.429                   0:01

これで(私が削除した-vv):

$ XZ_OPT='-T0 -9' tar -cJf junk.tar.xz ~/.config
tar: Removing leading `/' from member names

関連情報