gzip

gzip(ソフトウェア)
原作者
開発者GNUプロジェクト
初回リリース1992年10月31日 (1992年10月31日
安定版リリース
1.14 [ 1 ] ウィキデータで編集する / 2025年4月9日
リポジトリgit .savannah .gnu .org /cgit /gzip .git
書かれたC
オペレーティング·システムUnixライクPlan 9Inferno
タイプデータ圧縮
ライセンスGPL-3.0以降
Webサイトwww .gnu .org /ソフトウェア/gzip /

gzipは、ファイル形式であり、ファイルの圧縮と解凍を行うソフトウェアアプリケーションです。このプログラムは、初期のUnixシステムで使用されていたcompressプログラムのフリーソフトウェア代替として、 Jean-loup GaillyMark Adlerによって開発されました。GNU (gzipの「g」はGNUから来ています)での使用を目的としていました。バージョン0.1は1992年10月31日に初めて公開され、バージョン1.0は1993年2月にリリースされました。

ファイル形式はストリーミング アルゴリズムで解凍できるため、 Web プロトコルデータ交換ETL (標準パイプ内) などのストリームベースのテクノロジでよく使用されます。

ファイル形式

gzip(ファイル形式)
ファイル名拡張子
.gz、、.tgz.gzip
インターネットメディアの種類
application/gzip[ 2 ]
統一型識別子(UTI)org.gnu.gnu-zip-archiveorg.gnu.gnu-zip-tar-archive
魔法の数字1F 8B
サイズ制限無制限
開発者ジャン=ルー・ガイイーとマーク・アドラー
フォーマットの種類データ圧縮
標準IETF RFC  1952
オープンフォーマット?はい
Webサイトgzip .org(廃止)

gzip ファイル (下の表で説明) には、10バイトのヘッダー、オプションの追加ヘッダー フィールド、DEFLATE圧縮されたペイロード、および 8 バイトのトレーラーが含まれています。

gzipは、 LZ77ハフマン符号化を組み合わせたDEFLATEアルゴリズムに基づいています。DEFLATEは、当時compressユーティリティやその他の一般的なアーカイバの使い勝手を制限していたLZWやその他の特許で保護されたデータ圧縮アルゴリズムの代替として開発されました。

gzip はtarプログラムと組み合わせて複数のファイルを圧縮できます。

複数のストリームを連結することは可能ですが(gzip圧縮されたファイルは単純に連結された状態で解凍されます)、通常は1つのファイルのみが圧縮されます。[ 3 ]圧縮アーカイブは通常、複数のファイルを1つのtarアーカイブ(tarballとも呼ばれます)にまとめ、[ 5 ] そのアーカイブをgzipで圧縮することによって作成されます最終圧縮ファイル通常、拡張子が、または.tar.gz.tgz.gzip

gzipは、同じくDEFLATEを使用するZIPアーカイブ形式と混同しないでください。ZIP形式は外部アーカイバなしでファイルの集合を保持できますが、ファイルを個別に圧縮し、ファイル間の冗長性(ソリッド圧縮)を活用できないため、同じデータを保持する圧縮されたtarballよりもサイズが小さくなります。gzipファイル形式は、拡張子が.lzwのLZWベースのcompressユーティリティのファイル形式とも混同しないでください。ただし、gunzipユーティリティはファイルを解凍できます。[ 6 ].Z.Z

ファイル構造

すべてのマルチバイト値はリトルエンディアンでエンコードされます。[ 7 ]

オフセット(バイト) 分野[ 8 ]サイズ(バイト) 説明
0 ID1 1 マジックナンバー。 でなければなりません1F 8B
1 ID2 1
2 CM 1 圧縮方法。8 (Deflate) にする必要があります。
3 FLG 1 フラグ。予約ビットはゼロでなければなりません。
  • ビット 0 ( LSb ):FTEXT圧縮プログラムによって設定され、ファイルのエンコードがおそらくASCII であることを示します。
  • ビット1 :FHCRC
  • ビット2 :FEXTRA
  • ビット3 :FNAME
  • ビット4 :FCOMMENT
  • ビット5 : 予約済み
  • ビット6 : 予約済み
  • ビット7MSb): 予約済み
4 MTIME 4 ファイルが最後に変更されたUnix時間。圧縮データがファイルから取得されていない場合は、圧縮が開始されたMTIMEUnix時間。0はタイムスタンプがないことを意味します。
8 XFL 1 追加のフラグ
  • Deflate 固有のフラグ。
    • 0 : なし(デフォルト値
    • 2 : 最高の圧縮(レベル9)
    • 4 : 最速圧縮(レベル1)
9 OS 1 圧縮が行われた ファイルシステム。
10 XLEN 0または2 追加フィールドはサブフィールドのシーケンスです。XLENは追加フィールドのバイト単位のサイズです。FEXTRAフラグが設定されている場合、両方とも存在します。各サブフィールドは(2バイトの識別子。通常はニーモニック値を持つ2つのASCII文字)で始まりSI1 SI2その後サブフィールドの残りのバイト数を示す2バイトのLEN値が続きます。 が付いたサブフィールドIDは、SI2 = 0将来の使用のために予約されています。
12 追加フィールド 0またはXLEN
様々 ファイル名 0または変化する 圧縮対象ファイルのヌル終端名。FNAMEフラグが設定されている場合に存在します。ISO 8859-1( )としてエンコードされます大文字latin-1小文字を区別しないファイルシステムでは小文字に変換されます。圧縮データが名前付きファイルから取得されていない場合は空になります。
ファイルのコメント 0または変化する 人間が読むためのヌル終端ファイルコメント。FCOMMENTフラグ設定されている場合に存在します。ISO 8859-1(latin-1)でエンコードされます。改行には単一のラインフィード(LF)文字を使用する必要があります。
CRC16 0または2 gzipファイル内のこのフィールドまでの(このフィールドを含まない)全バイトのCRC-32 (ISO 3309)の下位2バイト。FHCRCフラグ設定されている場合に存在します。
圧縮データ 様々 圧縮されたデータ
CRC32 4 非圧縮データのCRC-32(ISO 3309)。
サイズ 4 圧縮されていないデータのサイズ(バイト単位)。 232{\displaystyle 2^{32}}

実装

NetBSD Gzip / FreeBSD Gzip
開発者NetBSD財団
リポジトリcvsweb .netbsd .org /bsdweb .cgi /src /usr .bin /gzip /
書かれたC
タイプデータ圧縮
ライセンス簡易BSDライセンス

このプログラムには様々な実装が書かれている。最もよく知られているのは、GNUプロジェクトによるLempel-Zivコーディング(LZ77)を使用した実装である。OpenBSDgzip版は実際にはcompressプログラムであり、OpenBSD 3.4でgzip形式のサポートが追加された。この特定のバージョンの「g」は無料を意味する。[ 9 ] FreeBSDDragonFly BSDNetBSDはGNU版ではなくBSDライセンスの実装を使用している。これは実際には、 GNU実装のオプションと互換性を持たせることを目的としたzlibコマンドラインインターフェースである。[ 10 ]これらの実装は元々 NetBSDに由来し、 bzip2およびUnixパック形式の解凍をサポートしている。

3~8% 高い圧縮率を実現する代替圧縮プログラムとして、Zopfliがあります。Zopfli は、より網羅的なアルゴリズムを用いて gzip 互換の圧縮を実現しますが、圧縮時間は長くなります。解凍時間には影響しません。

pigzマーク・アドラーによって書かれたはgzipと互換性があり、利用可能なすべてのCPUコアとスレッドを使用して圧縮を高速化します。[ 11 ]

損害回復

アーカイブの最初の破損部分より前のブロックのデータは通常、完全に読み取り可能です。破損によって破壊されず、その後に位置するブロックのデータは、困難な回避策によって回復できる可能性があります。[ 12 ]

誘導体およびその他の用途

ほとんどのLinuxディストリビューションに含まれているtarユーティリティは、 zオプションを渡すことで.tar.gzファイルを解凍できます(例:tar -zxf file.tar.gz)。ここで、は解凍を指示し、は展開を意味し、は展開元の圧縮アーカイブファイルの名前を指定します。オプションとして、(verbose)を指定すると、解凍中のファイルをリスト表示します。[ 13 ]-z-x-f-v

zlibライブラリDEFLATEアルゴリズムを実装し、gzipファイル形式と軽量データストリーム形式の両方をサポートしています。zlibストリーム形式、DEFLATE、gzipファイル形式はそれぞれRFC 1950、RFC 1951、RFC 1952として標準化されています。

gzip形式は、 HTTP圧縮で使用され、ワー​​ルドワイドウェブ上でHTMLやその他のコンテンツの送信を高速化する技術です。これは、RFC 2616で規定されているHTTP圧縮の3つの標準形式の1つです。このRFCでは、zlib形式(「DEFLATE」と呼ばれる)も規定されています。これはgzip形式と同等ですが、gzipではヘッダーとトレーラーの形で11バイトのオーバーヘッドが追加されます。しかし、Internet Explorerは標準を正しく実装しておらず、RFC 1950で規定されているzlib形式を処理できないため、zlibよりもgzip形式が推奨されることがあります。 [ 14 ]

zlib DEFLATE は、Portable Network Graphics (PNG) 形式によって内部的に使用されます。

1990年代後半以降、ブロックソートアルゴリズムに基づくファイル圧縮ユーティリティであるbzip2が、gzipの代替として人気を博してきました。bzip2は、特にソースコードやその他の構造化テキストにおいて、ファイルサイズを大幅に縮小しますが、メモリと処理時間を最大4倍消費します。[ 15 ]

AdvanceCOMP、Zopfli、libdeflate、7-Zip は、gzip 自体よりも優れた圧縮率を持つ内部 DEFLATE 実装を使用して、gzip 互換ファイルを生成できます。ただし、リファレンス実装と比較すると、プロセッサ時間は長くなります。

2023年に発表された研究では、gzipなどの単純なロスレス圧縮技術をk近傍法分類器と組み合わせることで、自然言語処理におけるテキスト分類において、ディープニューラルネットワークに代わる魅力的な代替手法を構築できることが示されました。このアプローチは、 GPUハードウェアを必要としないなど、リソース要件が低いため、BERTなどの従来のアプローチと同等、あるいは場合によってはそれを上回る性能を示すことが示されています。[ 16 ]

参照

注記

  1. ^ Jim Meyering (2025年4月9日). 「gzip-1.14 リリース [安定版]」 . 2025年4月10日閲覧
  2. ^ 「application/zlib」および「application/gzip」メディアタイプインターネット技術タスクフォース。doi : 10.17487/RFC6713。RFC 6713。 20143月1閲覧
  3. ^ 「GNU Gzip: 高度な使用法」 Gnu.org . 2012年12月24日時点のオリジナルよりアーカイブ2012年11月28日閲覧。
  4. ^ 「gzipで複数のファイルを1つのアーカイブに圧縮できますか?」 Gnu.org 2010年7月22日時点のオリジナルよりアーカイブ2010年1月27日閲覧。
  5. ^ "tarball, The Jargon File, version 4.4.7" . Catb.org . 2017年3月20日時点のオリジナルよりアーカイブ。 2010年1月27日閲覧
  6. ^ "GNU Gzip" . GNUオペレーティングシステムとフリーソフトウェア運動. 2023年2月5日. 2024年4月3日閲覧。gunzipは現在、gzip、zip、compress、またはpackで作成されたファイルを解凍できます。入力形式の検出は自動で行われます。
  7. ^全体的な規約. p. 4. doi : 10.17487/RFC1952 . RFC 1952 .
  8. ^メンバーフォーマット. p. 5. doi : 10.17487/RFC1952 . RFC 1952 .
  9. ^ "OpenBSD gzip(1) マニュアルページ" . Openbsd.org . OpenBSD . 2018年2月4日閲覧
  10. ^ "gzip" . Man.freebsd.org. 2011年10月9日. 2019年12月17日時点のオリジナルよりアーカイブ。 2014年3月1日閲覧
  11. ^ Mark Adler (2017). 「pigz: 最新のマルチプロセッサ、マルチコアマシン向けのgzipの並列実装」 . zlib.net . 2018年12月18日時点のオリジナルよりアーカイブ。 2018年12月23日閲覧
  12. ^破損した .gz ファイルの復元 – Jean-loup Gailly、GZip.org
  13. ^ 「Linuxコマンドラインからtar.gzファイルを抽出/解凍する方法」。phoenixNAPによるナレッジベース。2019年11月14日。 2022年1月12日閲覧
  14. ^ Lawrence, Eric (2014年11月21日). 「Webの圧縮」 . MSDN Blogs > IEInternals . Microsoft . 2015年10月28日時点のオリジナルよりアーカイブ2015年11月2日閲覧。
  15. ^ 「比較ツール:7-zip vs bzip2 vs gzip」 . compressionratings.com . 2014年11月1日時点のオリジナルよりアーカイブ。 2014年11月1日閲覧
  16. ^江智英;ヤン、マシュー。ツィルリン、ミハイル。タン、ラファエル。ダイ、イーチン。リン、ジミー (2023 年 7 月)。「「低リソース」テキスト分類:コンプレッサーを用いたパラメータフリー分類法」計算言語学会の調査結果:ACL 2023。トロント、カナダ:計算言語学会:6810–6828。doi 10.18653/v1 / 2023.findings - acl.426。S2CID  260668487

参考文献