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

相關內容