このページの内容

lz4(1) -- lz4, unlz4, lz4cat - .lz4ファイルの圧縮または展開

書式

lz4 [OPTIONS] [-|INPUT-FILE]

unlz4はlz4 -dと同等です。

lz4catはlz4 -dcfmと同等です。

ファイルを展開するスクリプトを書く場合は、unlz4やlz4catという名前ではなく、常にlz4という名前を適切な引数(lz4 -dまたはlz4 -dc)とともに使うことを推奨します。

説明

lz4は、可逆圧縮アルゴリズムの極めて高速な実装であるliblz4を基にしたCLIです。既定の圧縮速度は通常、コアあたり> 500 MB/sです。圧縮レベルのパラメーターを増やすことで、速度と引き換えに圧縮率を高められます。展開は単一スレッドで動作しますが、複数GB/sに達し、一般にI/Oが律速になるほど十分に高速です。lz4固有のファイル形式は.lz4形式です。

lz4とgzipの違い

lz4は、gzip(1)と似ているものの 同一ではない コマンドライン構文をサポートします。違いは次のとおりです。

  • lz4は既定で単一ファイルを圧縮します(複数ファイルについては-mを参照)。
  • lz4 file1 file2は、file1をfile2 へ 圧縮することを意味します。
  • lz4 file.lz4は既定で展開します(圧縮を強制するには-zを使用)。
  • lz4は元のファイルを保持します(完了時に元ファイルを削除するには--rmを参照)。
  • lz4は、単一ファイルの圧縮または展開中に統計をリアルタイムで通知します(表示を抑えるには-qを使用)。
  • 出力先を指定しない場合、結果は暗黙の出力先へ送られます。この出力先はstdoutの状態によって決まります。stdoutが コンソールではない 場合、これが暗黙の出力先になります。それ以外、つまりstdoutがコンソールの場合、暗黙の出力先はfilename.lz4です。
  • スクリプトの環境は変わる可能性があるため、スクリプトで暗黙の出力先に依存するのは望ましくないとされています。スクリプトでは常に出力先を明示してください。-cを使えば出力先は確実にstdoutになります。一方、出力先の名前を指定するか、-mを使用すれば、出力先はそれぞれ指定した名前、またはfilename.lz4になります。

既定の動作は、以下の明示的なコマンド指定で変更できます。

  • lz4 -mを使うと、複数の入力ファイル名を指定できます。各ファイルは接尾辞.lz4を付けたファイルへ圧縮されます。進捗通知は既定で無効になります(有効にするには-vを使用)。このモードはgzipのコマンドラインにより近い動作になりますが、元ファイルを既定で保持するという主な違いは残ります。
  • 同様に、lz4 -m -dは複数の*.lz4ファイルを展開できます。
  • --rmコマンドを使えば、圧縮または展開が成功したときに元ファイルを削除する動作を明示的に選択できます。
  • その結果、lz4 -m --rmの動作はgzipにさらに近くなります。

.lz4ファイルの連結

.lz4ファイルは、そのまま連結できます。lz4は、連結したファイルを単一の.lz4ファイルであるかのように展開します。例:

lz4 file1  > foo.lz4
lz4 file2 >> foo.lz4

この場合、lz4cat foo.lz4はcat file1 file2と同等です。

オプション

短いコマンドの連結

一部のオプションは、短いコマンド-xまたは長いコマンド--long-wordで表せます。短いコマンドは連結できます。たとえば、-d -cは-dcと同等です。長いコマンドは連結できません。スペースで明確に区切る必要があります。

複数のコマンド

同じコマンドラインに矛盾するコマンドを複数指定した場合、最後のコマンドだけが適用されます。

動作モード

  • -z --compress: 圧縮します。動作モードのオプションを指定せず、コマンド名(たとえばunlz4は--decompressを意味します)からも、入力ファイル名(たとえば拡張子.lz4は既定で--decompressを意味します)からも別の動作モードが示されない場合、これが既定の動作モードです。-zは、すでに圧縮済みの.lz4ファイルを強制的に圧縮するためにも使えます。

  • -d --decompress --uncompress: 展開します。入力ファイル名の拡張子が.lz4の場合も、--decompressが既定の動作です。

  • -t --test: 圧縮済み.lz4ファイルの完全性を検査します。展開したデータは破棄されます。ファイルの作成も削除も行いません。

  • -b#: 圧縮レベル#を使用するベンチマークモードです。

  • --list: .lz4ファイルの情報を一覧表示します。複数フレームを持つファイルの詳細情報には-vを使用してください。--listは、修飾オプション-mを自動的に有効にします。

動作の修飾オプション

  • -#: 圧縮レベルです。#には1から12までの値を指定します。値を大きくすると、圧縮速度と引き換えに圧縮率が上がります。12を超える値は12と同じとみなされます。推奨値は、高速な圧縮には1(既定)、高圧縮には9です。速度と圧縮率の関係は、圧縮するデータによって異なります。どの設定でも展開速度は高速なままです。

  • --fast[=#]: 超高速の圧縮レベルへ切り替えます。値を大きくすると、一部の圧縮率と引き換えに圧縮速度が上がります。=#を指定しない場合の既定値は1です。先に圧縮レベルを設定していた場合、この設定がそれを上書きします。同様に、--fastの後に圧縮レベルを設定すると、そちらがこの設定を上書きします。

  • --best: 最高の圧縮レベルを設定します。-12と同じです。

  • -T#, --threads=#: 圧縮に#個のスレッドを使用します。0の場合、または指定しない場合は、検出したコア数から自動的に決定します。

  • --favor-decSpeed: 展開速度を最適化した圧縮データを生成します。その結果、圧縮データは大きくなります(通常約0.5%増)が、展開速度は用途に応じて5-20%向上します。このオプションは、非常に高い圧縮レベル(>=10)との組み合わせでのみ機能します。

  • -D dictionaryName: 辞書 dictionaryName を使って圧縮、展開、またはベンチマークを行います。互換性を保つには、圧縮と展開で同じ辞書を使う必要があります。展開時に異なる辞書を使うと、展開エラーによって中止されるか、チェックサムエラーが発生します。

  • -f --[no-]force: このオプションには、複数の効果があります。

    出力先のファイルがすでに存在する場合、確認せずに上書きします。

    --decompressとともに使い、lz4が元ファイルの種類を認識できない場合は、元ファイルをそのまま標準出力へコピーします。これにより、lz4で圧縮されていないファイルに対しても、lz4cat --forceをcat (1)のように使用できます。

  • -c --stdout --to-stdout: 標準出力がコンソールの場合でも、標準出力への書き込みを強制します。

  • -m --multiple: 複数の入力ファイルを扱います。圧縮ファイル名には接尾辞.lz4が付加されます。このモードは通知レベルも下げます。複数ファイルの一覧表示にも使えます。lz4 -mはgzip -kと同等の動作です(元ファイルを既定で保持します)。

  • -r : ディレクトリを再帰的に処理します。このモードは-m(複数の入力ファイル)も有効にします。

  • -B#: ブロックサイズ[4-7](既定: 7)
    -B4= 64KB ; -B5= 256KB ; -B6= 1MB ; -B7= 4MB

  • -BI: 独立したブロックを生成します(既定)。

  • -BD: ブロックが先行ブロックに依存します(圧縮率が向上し、小さいブロックほど効果が顕著です)。

  • -BX: ブロックチェックサムを生成します(既定: 無効)。

  • --[no-]frame-crc: フレームチェックサムを選択します(既定: 有効)。

  • --no-crc: フレームとブロックの両方のチェックサムを無効にします。

  • --[no-]content-size: ヘッダーに元のサイズを含めます(既定: 含めない)。
    注: このオプションを有効にできるのは、元のサイズを特定できる場合、したがってファイルの場合だけです。stdinやパイプなど、元のサイズが不明な場合には機能しません。

  • --[no-]sparse: スパースモードのサポートです(既定: ファイルでは有効、stdoutでは無効)。

  • -l: Legacy形式を使用します(通常はLinux Kernelの圧縮用)。
    注: -lは-m(--multiple)および-rと互換性がありません。

その他のオプション

  • -v --verbose: 詳細表示モードです。

  • -q --quiet: 警告とリアルタイムの統計表示を抑制します。二度指定すると、エラー表示も抑制します。

  • -h -H --help: ヘルプまたは詳細ヘルプを表示して終了します。

  • -V --version: バージョン番号を表示して終了します。

  • -k --keep: 元ファイルを保持します(既定の動作)。

  • --rm : 圧縮または展開が成功したときに、元ファイルを削除します。

  • -- : これ以降の引数をすべてファイルとして扱います。

ベンチマークモード

  • -b#: 圧縮レベル#を使用してファイルをベンチマークします。

  • -e#: b#からe#まで(両端を含む)の複数の圧縮レベルをベンチマークします。

  • -i#: 最小評価時間を秒単位で指定します[1-9](既定: 3)。

環境変数

環境変数を使って、いくつかのパラメーターをlz4へ渡せます。これは、lz4が呼び出されることは分かっていても(たとえばスクリプトから)、圧縮セッションに影響するlz4のパラメーターを渡す手段がない状況で役立ちます。環境変数は、実行ファイルの既定値より優先されますが、対応する実行時コマンドより優先順位は低くなります。グローバルな環境変数として設定すれば、実行ファイルに設定された値と異なる個人用の既定値を適用する手段になります。

  • LZ4_CLEVEL: コマンドラインで他の圧縮レベルを指定していない場合に、lz4が圧縮に使用する既定の圧縮レベルを指定します。実行ファイルの既定値は一般に1です。

  • LZ4_NBWORKERS: lz4が圧縮に使用する既定のスレッド数を指定します。実行ファイルの既定値は一般に0で、ローカルCPUに基づく自動決定を意味します。この機能が関係するのは、lz4をマルチスレッド対応でコンパイルした場合だけです。ワーカーの最大数はLZ4_NBWORKERS_MAX(既定では200)で制限されます。

バグ

バグの報告先: https://github.com/lz4/lz4/issues

著者

Yann Collet