アーカイブの1つの問題.tar.gz
は、アーカイブの内容を一覧表示しようとすると、コンピュータが実際に解凍されるため、ファイルが大きい場合は時間がかかることがあります。
.7z
、、.rar
などの他のファイル形式には.zip
この問題はありません。内容の一覧表示には数分しかかかりません。
私の考えでは、これは.tar.gz
アーカイブ形式の大きな欠点です。
だから実際には2つの質問があります。
.tar.gz
これらの欠点にもかかわらず、人々はなぜそれをそれほど多く使用するのですか?- 「インスタントコンテンツリスト」機能が必要な場合はどのようなオプションがありますか?(他のソフトウェアやツールを意味します)
答え1
ここに妥協があることを理解することが重要です。
tar
方法テープアーカイバー。テープは主に順次読み書きを行います。テープは今日はほとんど使用されていませんが、tar
ストリーミング形式でデータを読み書きする機能にはまだ使用されています。
あなたはできます:
tar cf - files | gzip | ssh host 'cd dest && gunzip | tar xf -'
zip
そんなことやそんなことはできません。
zip
まず、ローカルで検索可能なファイルに保存しないと、アーカイブの内容を一覧表示することもできません。図:
curl -s https://github.com/dwp-forge/columns/archive/v.2016-02-27.zip | unzip -l /dev/stdin
不可能。
コンテンツをすばやく読むにはzip
インデックス作成が必要です。インデックスはファイルの先頭(この場合はストリームではなく通常のファイルにのみ書き込むことができます)またはファイルの最後に保存できます。つまり、アーカイバは、印刷する前にすべてのアーカイブを覚えておく必要があることを意味します。これは、切り捨てられたアーカイブを回復できないことを意味します。
これはまた、アーカイブメンバーを個別に圧縮しなければならないことを意味します。
同様の形式の別の欠点は、zip
アーカイブが圧縮に関連しており、圧縮アルゴリズムを選択できないことである。 ( )、 、 を順番に使用し、新しいtar
高性能圧縮アルゴリズムを設計してアーカイブを圧縮する方法を学びます。暗号化も同様です。今日、誰が暗号化を信頼していますか?compress
tar.Z
gzip
bzip2
xz
zip
今、アーカイブの問題tar.gz
は解凍しなければならないということではありません。解凍は通常、ディスクから読み取るよりも高速ですが(大規模なtgzアーカイブの内容を一覧表示することは、メモリにキャッシュされていない同じ圧縮されていない内容を一覧表示するよりも速いことがわかります)、アーカイブ全体を読み取る必要があります。
インデックスをすばやく読むことができないことは実際には問題になりません。アーカイブされたテーブルの内容を頻繁に読む必要がある場合は、リストを別のファイルに保存できます。たとえば、作成時に次のことができます。
tar cvvf - dir 2> file.tar.xz.list | xz > file.tar.xz
IMOの大きな問題は、アーカイブのシーケンシャルな側面のため、アーカイブの最初の部分を読み取らないと単一のファイルを抽出できないことです。 IOW、アーカイブではランダム読み取りを実行できません。
今見つけることができるファイルの場合、必ずしもそうではありません。
tar
圧縮アーカイブを使用してgzip
完全に圧縮する場合、圧縮アルゴリズムは最初に見たデータを使用して圧縮するため、最初から解凍を開始する必要があります。
ただし、xz
データを別々のチャンク(圧縮が効果的であるほど大きいサイズ)に圧縮するようにフォーマットを設定できます。つまり、検索可能ファイルの場合、圧縮チャンクの末尾にインデックスを保持する限り、非圧縮ランダムデータにアクセスできます。 (少なくとも塊)。
pixz
(並列xz
)アーカイブを圧縮するときにこの機能を使用しtar
、アーカイブの各メンバーの開始インデックスをファイルの末尾に追加することもできますxz
。
したがって、検索可能ファイルの場合、圧縮された場合にtarアーカイブの内容のリストをすぐに取得できるだけでなく(メタデータはありませんが)pixz
:
pixz -l file.tar.xz
ただし、アーカイブ全体を読み取ることなく個々の要素を抽出することもできます。
pixz -x archive/member.txt < file.tar.xz | tar xpf -
7z
現在、Unixでこのようなものがほとんど使用されていないのは、主にzip
Unixファイルを保持していないからです。これは他のオペレーティングシステム用に設計されています。これを使用してデータを忠実にバックアップすることはできません。所有者(IDと名前)、権限などのメタデータを保存することはできません。シンボリックリンク、デバイス、FIFOなどを保存することはできません。
その中には、任意の名前でメンバーを保存することはできません(一部はバックスラッシュ、改行、コロン、またはASCII以外のファイル名をブロックします)(tar
ただし、いくつかの形式に制限があります)。
tgz/tar.xz ファイルをディスクに解凍しないでください。
明確でない場合は、tgz
or tar.bz2
、tar.xz
...を次のように使用しないでください。
unxz ファイル.tar.xz tar tvf ファイル.tar xz ファイル.tar
.tar
ファイルシステムに圧縮されていないファイルがあると、何かが間違っています。
これらのxz
ストリームコンプレッサーの重要な点は、次のパイプラインで動的に使用できることです。bzip2
gzip
unxz < file.tar.xz | tar tvf -
最新の実装では、//自分をtar
呼び出す方法を知っていますが、次のようになります。unxz
gunzip
bzip2
tar tvf file.tar.xz
この方法も一般的に機能します。インスタントでデータの圧縮を再開し、圧縮されていないバージョンのアーカイブをディスクに保存しません。
はい
これはさまざまな形式の圧縮Linuxカーネルソースツリーです。
$ ls --block-size=1 -sS1
666210304 linux-4.6.tar
173592576 linux-4.6.zip
97038336 linux-4.6.7z
89468928 linux-4.6.tar.xz
まず、上記のように、7zとzipは少数のシンボリックリンクを保存できず、ほとんどのメタデータが失われるという点で少し異なります。
システムキャッシュをフラッシュした後にコンテンツを一覧表示する機会がいくつかあります。
$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
$ time tar tvf linux-4.6.tar > /dev/null
tar tvf linux-4.6.tar > /dev/null 0.56s user 0.47s system 13% cpu 7.428 total
$ time tar tvf linux-4.6.tar.xz > /dev/null
tar tvf linux-4.6.tar.xz > /dev/null 8.10s user 0.52s system 118% cpu 7.297 total
$ time unzip -v linux-4.6.zip > /dev/null
unzip -v linux-4.6.zip > /dev/null 0.16s user 0.08s system 86% cpu 0.282 total
$ time 7z l linux-4.6.7z > /dev/null
7z l linux-4.6.7z > /dev/null 0.51s user 0.15s system 89% cpu 0.739 total
tar.xz
この7年後のPCでも、ファイルのリストがファイルを読むよりも速いことがわかります。.tar
これは、ディスクから追加のメガバイトを読み取る方が小さいファイルを読み取って解凍するよりも速いためです。
もしそうなら、7zまたはzipでアーカイブをリストする方が速いかもしれませんが、問題ではありません。アーカイブでファイルのリストを保存すると、簡単に解決できると言ったように:
$ tar tvf linux-4.6.tar.xz | xz > linux-4.6.tar.xz.list.xz
$ ls --block-size=1 -sS1 linux-4.6.tar.xz.list.xz
434176 linux-4.6.tar.xz.list.xz
$ time xzcat linux-4.6.tar.xz.list.xz > /dev/null
xzcat linux-4.6.tar.xz.list.xz > /dev/null 0.05s user 0.00s system 99% cpu 0.051 total
キャッシュを削除した後でも、速度は7zまたはzipよりはるかに高速です。また、アーカイブとそのインデックスの累積サイズがまだzipまたは7zアーカイブよりも小さいことがわかります。
または、pixz
インデックス形式を使用します。
$ xzcat linux-4.6.tar.xz | pixz -9 > linux-4.6.tar.pixz
$ ls --block-size=1 -sS1 linux-4.6.tar.pixz
89841664 linux-4.6.tar.pixz
$ echo 3 | sudo tee /proc/sys/vm/drop_caches
3
$ time pixz -l linux-4.6.tar.pixz > /dev/null
pixz -l linux-4.6.tar.pixz > /dev/null 0.04s user 0.01s system 57% cpu 0.087 total
今、アーカイブの個々の要素を抽出するためにtarアーカイブの最悪のシナリオは、最後の要素にアクセスする場合です。
$ xzcat linux-4.6.tar.xz.list.xz|tail -1
-rw-rw-r-- root/root 5976 2016-05-15 23:43 linux-4.6/virt/lib/irqbypass.c
$ time tar xOf linux-4.6.tar.xz linux-4.6/virt/lib/irqbypass.c | wc
257 638 5976
tar xOf linux-4.6.tar.xz linux-4.6/virt/lib/irqbypass.c 7.27s user 1.13s system 115% cpu 7.279 total
wc 0.00s user 0.00s system 0% cpu 7.279 total
これは、アーカイブ全体を読み取って解凍する必要があるため、非常に悪いです。比較:
$ time unzip -p linux-4.6.zip linux-4.6/virt/lib/irqbypass.c | wc
257 638 5976
unzip -p linux-4.6.zip linux-4.6/virt/lib/irqbypass.c 0.02s user 0.01s system 19% cpu 0.119 total
wc 0.00s user 0.00s system 1% cpu 0.119 total
私のバージョンの7zにはランダムアクセス権がないようですtar.xz
。
$ time 7z e -so linux-4.6.7z linux-4.6/virt/lib/irqbypass.c 2> /dev/null | wc
257 638 5976
7z e -so linux-4.6.7z linux-4.6/virt/lib/irqbypass.c 2> /dev/null 7.28s user 0.12s system 89% cpu 8.300 total
wc 0.00s user 0.00s system 0% cpu 8.299 total
pixz
これで、以前に作成した項目が作成されました。
$ time pixz < linux-4.6.tar.pixz -x linux-4.6/virt/lib/irqbypass.c | tar xOf - | wc
257 638 5976
pixz -x linux-4.6/virt/lib/irqbypass.c < linux-4.6.tar.pixz 1.37s user 0.06s system 84% cpu 1.687 total
tar xOf - 0.00s user 0.01s system 0% cpu 1.693 total
wc 0.00s user 0.00s system 0% cpu 1.688 total
より高速ですが、アーカイブに大きなチャンクがほとんど含まれていないため、まだ比較的遅いです。
$ pixz -tl linux-4.6.tar.pixz
17648865 / 134217728
15407945 / 134217728
18275381 / 134217728
19674475 / 134217728
18493914 / 129333248
336945 / 2958887
したがって、pixz
最大19MBの大規模データブロックを読み取って解凍する必要があります。
アーカイブをより小さな塊にし、少しのディスクスペースを犠牲にしてランダムアクセスを高速化できます。
$ pixz -f0.25 -9 < linux-4.6.tar > linux-4.6.tar.pixz2
$ ls --block-size=1 -sS1 linux-4.6.tar.pixz2
93745152 linux-4.6.tar.pixz2
$ time pixz < linux-4.6.tar.pixz2 -x linux-4.6/virt/lib/irqbypass.c | tar xOf - | wc
257 638 5976
pixz -x linux-4.6/virt/lib/irqbypass.c < linux-4.6.tar.pixz2 0.17s user 0.02s system 98% cpu 0.189 total
tar xOf - 0.00s user 0.00s system 1% cpu 0.188 total
wc 0.00s user 0.00s system 0% cpu 0.187 total
答え2
- これらの欠点にもかかわらず、人々はなぜそれをそれほど多く使用するのでしょうか。
ビジネスおよびトレーニングマネージャは、仕事が効率的に実行されたときに監査するよりも、仕事が中断されたときに注目される傾向があります。 そのような環境実験の恐怖を育て、新しいものを軽蔑する。
- 「インスタントコンテンツリスト」機能が必要な場合、私のオプションは何ですか(他のソフトウェア/ツールを意味します)?
ダル(Diskアルゴンチーバー)の数が多いアスファルト同様の機能に圧縮されたアーカイブへの高速ランダムアクセス、AKAカタログの作成、AKAインデックス作成、AKA「インスタントコンテンツリスト」などの拡張機能が追加されました。