%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%83%A1%E3%83%A2%E3%83%AA%2F%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E4%BD%BF%E7%94%A8%E9%87%8F%E3%81%AF%3F.png)
から単一のファイルを抽出できることは承知していますtar
。
tar -xf file.tar.gz /small/single/file
私はこれを、ディスク/RAM が制限された組み込みシステムで実行するつもりです。このコマンドが大きな tarball をどのように処理するかを知りたいです。
1 つのファイルを抽出すると、tarball 全体がメモリに解凍されますか? すべてを解凍してもかまいませんが、小さなバッファで解凍される限りは問題ありません。
使用可能な RAM が 100MB あり、ディスク容量が 5MB だとします。また、/small/single/file
5MB 未満です。また、ソース tarball は 500MB です。安全に抽出できますか/small/single/file
?
答え1
答えはおそらく使用しているの実装によって異なりますtar
が、現実的には、ほとんどの実装では比較的小さなバッファを使用してtarballを処理すると予想されます。2GiB圧縮されたtarballtar
でGNUを使用してbzip2
1つのファイルを抽出すると、次のようになります。
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