![tar --提取大型 tar.gz 的单个(小)文件,内存/磁盘使用情况?](https://linux22.com/image/122173/tar%20--%E6%8F%90%E5%8F%96%E5%A4%A7%E5%9E%8B%20tar.gz%20%E7%9A%84%E5%8D%95%E4%B8%AA%EF%BC%88%E5%B0%8F%EF%BC%89%E6%96%87%E4%BB%B6%EF%BC%8C%E5%86%85%E5%AD%98%2F%E7%A3%81%E7%9B%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%9F.png)
我知道您可以从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