tar --提取大型 tar.gz 的单个(小)文件,内存/磁盘使用情况?

tar --提取大型 tar.gz 的单个(小)文件,内存/磁盘使用情况?

我知道您可以从tar.

tar -xf file.tar.gz /small/single/file

我打算在磁盘/内存有限的嵌入式系统上运行它。我想知道这个命令如何处理大 tarball。

提取单个文件是否会导致整个 tarball 解压到内存中?我不介意将其全部解压,但只要它具有较小的缓冲区即可。

假设我有 100MB 的可用 RAM 和 5MB 的可用磁盘空间。另外,/small/single/file小于 5MB。另外,源 tarball 大小为 500MB。我可以安全提取吗/small/single/file

答案1

答案可能取决于tar您正在使用的实现,但实际上,我希望大多数实现使用相对较小的缓冲区来处理 tarball。tar在 2GiB 压缩的 tarball 上使用 GNUbzip2来提取单个文件,我得到

64.07user 4.84system 2:53.45elapsed 97%CPU (0avgtext+0avgdata 4664maxresident)k
4046976inputs+8outputs (0major+1194minor)pagefaults 0swaps

(使用 GNU time)。如您所见,最大驻留大小低于 5MiB。

答案2

为了最大限度地减少 RAM/磁盘的使用,我建议使用这样的管道:

gzip -dc file.tar.gz| tar -f - /small/single/file

相关内容