はじめに
zip まわり(圧縮方式やコマンド)について、学習したことやリンクを用語ごとにメモする。
ライブラリ、圧縮アルゴリズム、データ形式、あたりにおいて同じ名前が縦横無尽に使われているので、分類はざっくり(重複が多い)
自分が将来、見返せる用。
圧縮アルゴリズム
- deflate
- https://ja.wikipedia.org/wiki/Deflate
- https://www.rfc-editor.org/rfc/rfc1951
- 可逆圧縮
- ストリーム
- checksum がついていないので、実用的には zlib/gzipで使う
- inflate
- deflate の展開アルゴリズム
用語
- アーカイブ
- 複数ファイルを1つの連続したデータ列としてまとめたもの、まとめること(圧縮、非圧縮問わない)
- wiki: https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
ファイル拡張子
-
png
- zlib 圧縮された画像
- つまり、圧縮アルゴリズムはdeflate
-
pdf
- zlib 圧縮されたデータ
-
tar
- 非圧縮でアーカイブのみ
- UNIXメタデータ豊富保持
- Windows/Mac で利用されにくい一方、Linuxでは便利
- mode, uid, gid, symlink など保存可能
- なんと、デバイスファイルも保存可能(inodeのみ)
- 大規模、並列、ストリーム
- pathも保存される
- 圧縮ライブラリをリンクして使う。
- libzstd
- liblzma
- zlib
-
zip
- 圧縮およびアーカイブ(tarはアーカイブのみ)
- 圧縮アルゴリズムは deflate が標準
- pathも保存される
- windows/Macでよく利用される
- wiki: https://ja.wikipedia.org/wiki/ZIP_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)
- メタデータは最小
- CRC32チェックサム
-
ar
- 非圧縮
- ファイルメタデータほぼなし
-
gz
- gzip 圧縮
- 非アーカイブ(原則、1ファイル)
-
tar.gz
- tar を gzip 圧縮したもの
ライブラリ
- zlib
- 圧縮ライブラリ+データ形式
- 圧縮ライブラリはdeflate/inflate(実質)
- データ形式は、zlibヘッダ+deflateデータ
- 具体
- [zlib header][deflate compressed data][Adler-32 checksum]
- 具体
- HTTP の deflate は歴史的に zlib を指すことが多い
- データの中に埋め込まれ、ファイルとして独立することが少ないデータ形式のため、標準の拡張子はない
- gzip
- GNU zip
- wiki: https://ja.wikipedia.org/wiki/Gzip
- RFC: https://www.rfc-editor.org/rfc/rfc1952
- 圧縮ライブラリ+データ形式
- ファイル名やタイムスタンプをもつ
- データ形式は、gzipヘッダ+deflateデータ
- 具体
- [gzip header][deflate compressed data][CRC-32 checksum]
- 具体
- zstd(libzstd)
- 圧縮ライブラリ+データ形式
- 高速・高圧縮・並列化に強い
- 「アプリが直接使う」前提
- ネットワーク・RPC・DB・ログ圧縮向き
- xz(liblzma)
- 圧縮ライブラリ+データ形式
- 非常に高圧縮・CPU重い・低速
- 「ファイルを圧縮する」前提
- アプリ内部利用は少なめ
- tar
- tar ファイルを作る
- -z オプションで、 gzip も同時に行う
Gzip Wikipediaにあった整理
Gzip Wikipediaページによいまとめがあったので引用

- アーカイブのみ
- ar AXF BagIt(英語版) cpio LBR(英語版) shar(英語版) tar WAD WARC
- 圧縮のみ
- Brotli bzip2 compress gzip LZMA LZ4 lzip lzop SQ(英語版) xz Zstandard pack
- アーカイブおよび圧縮
- 7z ACE ARC(英語版) ARJ B1(英語版) Cabinet cfs(英語版) cpt dar(英語版) DGCA .dmg .egg(英語版) GCA kgb(英語版) LHA LZX MPQ(英語版) PEA .qda RAR rzip(英語版) sit SQX(英語版) UDA(PAQ/UDA) Xar(英語版) zoo ZIP ZPAQ
- ソフトウェアパッケージ
- pkg (SVR4) deb pkg (macOS) RPM RUNZ MSI JAR WAR RAR (Java) EAR XPI
- 文書パッケージ
- OEB Package Format OEBPS Container Format (EPUB) Open Packaging Conventions Office Open XML