我怎么知道 tar 是否真的将 XZ_OPT 传递给 xz?

Wei*_*ian 4 tar xz

我在做什么:

XZ_OPT='-T0 -9 -vv' tar -vvcJf ~/backup.tar.xz ...FILES
Run Code Online (Sandbox Code Playgroud)

我怀疑是否tar真的通过了给定的选项,我已经尝试过这些事情:

  1. 我使用了-vvin XZ_OPT,但xz输出中没有消息,也没有--verbose
  2. 我也ps aux | grep xz用来查看是否tar会为spawn另一个进程xz,但我没有看到tar创建任何进程。

问题

  1. 请问XZ_OPT环境真的有用吗?如何验证?
  2. 为什么我xztar执行过程中找不到进程?难道tar真的产卵过程来压缩文件?

环境

$ 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
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 11

  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
Run Code Online (Sandbox Code Playgroud)
  1. 为什么我xz在 tar 执行过程中找不到进程?难道tar真的产卵过程来压缩文件?

从上面的输出来看,确实如此。您的存档是否需要足够长的时间来创建以维持流程?ps aux | grep xz并且pgrep -fa xzxz为我展示了流程。


tar除非它们失败,否则很可能不会显示它调用的程序的输出。否则,他们可能会在输出中添加不受控制的噪声,而这些噪声并不是tar它本身所要求的。

  • @WeihangJian 是的,我的 [`man bsdtar`](https://man.archlinux.org/man/core/libarchive/bsdtar.1.en#BUGS) 说“压缩和解压是内部实现的,所以可能会有`tar -czf - file` 生成的压缩输出与 `tar -cf - file | gzip` 生成的压缩输出之间的差异不大" [和](https://man.archlinux.org/man/core/libarchive/bsdtar .1.en#EXAMPLES) "您可以设置 gzip 或 xz 压缩使用的压缩级别:`tar -czf file.tar --options='compression-level=9'`。 (3认同)
  • 不太确定它为什么会起作用,但我认为如果没有 `--use-compress-program`,bsdtar 会尝试使用它的内置压缩器,它甚至不会关心 XZ_OPT。需要更多时间进行调查。 (2认同)