xref: /aosp_15_r20/external/lz4/programs/lz4.1.md (revision 27162e4e17433d5aa7cb38e7b6a433a09405fc7f)
1*27162e4eSAndroid Build Coastguard Workerlz4(1) -- lz4, unlz4, lz4cat - Compress or decompress .lz4 files
2*27162e4eSAndroid Build Coastguard Worker================================================================
3*27162e4eSAndroid Build Coastguard Worker
4*27162e4eSAndroid Build Coastguard WorkerSYNOPSIS
5*27162e4eSAndroid Build Coastguard Worker--------
6*27162e4eSAndroid Build Coastguard Worker
7*27162e4eSAndroid Build Coastguard Worker`lz4` [*OPTIONS*] [-|INPUT-FILE] <OUTPUT-FILE>
8*27162e4eSAndroid Build Coastguard Worker
9*27162e4eSAndroid Build Coastguard Worker`unlz4` is equivalent to `lz4 -d`
10*27162e4eSAndroid Build Coastguard Worker
11*27162e4eSAndroid Build Coastguard Worker`lz4cat` is equivalent to `lz4 -dcfm`
12*27162e4eSAndroid Build Coastguard Worker
13*27162e4eSAndroid Build Coastguard WorkerWhen writing scripts that need to decompress files,
14*27162e4eSAndroid Build Coastguard Workerit is recommended to always use the name `lz4` with appropriate arguments
15*27162e4eSAndroid Build Coastguard Worker(`lz4 -d` or `lz4 -dc`) instead of the names `unlz4` and `lz4cat`.
16*27162e4eSAndroid Build Coastguard Worker
17*27162e4eSAndroid Build Coastguard Worker
18*27162e4eSAndroid Build Coastguard WorkerDESCRIPTION
19*27162e4eSAndroid Build Coastguard Worker-----------
20*27162e4eSAndroid Build Coastguard Worker
21*27162e4eSAndroid Build Coastguard Worker`lz4` is a CLI based on `liblz4`, an extremely fast implementation of lossless compression algorithm.
22*27162e4eSAndroid Build Coastguard WorkerIt provides a default compression speed of typically > 500 MB/s per core.
23*27162e4eSAndroid Build Coastguard WorkerSpeed can traded for higher compression ratio, by increasing the compression level parameter.
24*27162e4eSAndroid Build Coastguard WorkerWhile decompression is single-threaded, it reaches multiple GB/s, generally fast enough to be I/O bound.
25*27162e4eSAndroid Build Coastguard Worker`lz4` native file format is the `.lz4` format.
26*27162e4eSAndroid Build Coastguard Worker
27*27162e4eSAndroid Build Coastguard Worker### Difference between lz4 and gzip
28*27162e4eSAndroid Build Coastguard Worker
29*27162e4eSAndroid Build Coastguard Worker`lz4` supports a command line syntax similar _but not identical_ to `gzip(1)`.
30*27162e4eSAndroid Build Coastguard WorkerDifferences are :
31*27162e4eSAndroid Build Coastguard Worker
32*27162e4eSAndroid Build Coastguard Worker  * `lz4` compresses a single file by default (see `-m` for multiple files)
33*27162e4eSAndroid Build Coastguard Worker  * `lz4 file1 file2` means : compress file1 _into_ file2
34*27162e4eSAndroid Build Coastguard Worker  * `lz4 file.lz4` will default to decompression (use `-z` to force compression)
35*27162e4eSAndroid Build Coastguard Worker  * `lz4` preserves original files (see `--rm` to erase source file on completion)
36*27162e4eSAndroid Build Coastguard Worker  * `lz4` shows real-time notification statistics
37*27162e4eSAndroid Build Coastguard Worker     during compression or decompression of a single file
38*27162e4eSAndroid Build Coastguard Worker     (use `-q` to silence them)
39*27162e4eSAndroid Build Coastguard Worker  * When no destination is specified, result is sent on implicit output,
40*27162e4eSAndroid Build Coastguard Worker    which depends on `stdout` status.
41*27162e4eSAndroid Build Coastguard Worker    When `stdout` _is Not the console_, it becomes the implicit output.
42*27162e4eSAndroid Build Coastguard Worker    Otherwise, if `stdout` is the console, the implicit output is `filename.lz4`.
43*27162e4eSAndroid Build Coastguard Worker  * It is considered bad practice to rely on implicit output in scripts.
44*27162e4eSAndroid Build Coastguard Worker    because the script's environment may change.
45*27162e4eSAndroid Build Coastguard Worker    Always use explicit output in scripts.
46*27162e4eSAndroid Build Coastguard Worker    `-c` ensures that output will be `stdout`.
47*27162e4eSAndroid Build Coastguard Worker    Conversely, providing a destination name, or using `-m`
48*27162e4eSAndroid Build Coastguard Worker    ensures that the output will be either the specified name, or `filename.lz4` respectively.
49*27162e4eSAndroid Build Coastguard Worker
50*27162e4eSAndroid Build Coastguard WorkerDefault behaviors can be modified by opt-in commands, detailed below.
51*27162e4eSAndroid Build Coastguard Worker
52*27162e4eSAndroid Build Coastguard Worker  * `lz4 -m` makes it possible to provide multiple input filenames,
53*27162e4eSAndroid Build Coastguard Worker    which will be compressed into files using suffix `.lz4`.
54*27162e4eSAndroid Build Coastguard Worker    Progress notifications become disabled by default (use `-v` to enable them).
55*27162e4eSAndroid Build Coastguard Worker    This mode has a behavior which more closely mimics `gzip` command line,
56*27162e4eSAndroid Build Coastguard Worker    with the main remaining difference being that source files are preserved by default.
57*27162e4eSAndroid Build Coastguard Worker  * Similarly, `lz4 -m -d` can decompress multiple `*.lz4` files.
58*27162e4eSAndroid Build Coastguard Worker  * It's possible to opt-in to erase source files
59*27162e4eSAndroid Build Coastguard Worker    on successful compression or decompression, using `--rm` command.
60*27162e4eSAndroid Build Coastguard Worker  * Consequently, `lz4 -m --rm` features a behavior closer to the `gzip` one.
61*27162e4eSAndroid Build Coastguard Worker
62*27162e4eSAndroid Build Coastguard Worker### Concatenation of .lz4 files
63*27162e4eSAndroid Build Coastguard Worker
64*27162e4eSAndroid Build Coastguard WorkerIt is possible to concatenate `.lz4` files as is.
65*27162e4eSAndroid Build Coastguard Worker`lz4` will decompress such files as if they were a single `.lz4` file.
66*27162e4eSAndroid Build Coastguard WorkerFor example:
67*27162e4eSAndroid Build Coastguard Worker
68*27162e4eSAndroid Build Coastguard Worker    lz4 file1  > foo.lz4
69*27162e4eSAndroid Build Coastguard Worker    lz4 file2 >> foo.lz4
70*27162e4eSAndroid Build Coastguard Worker
71*27162e4eSAndroid Build Coastguard WorkerThen `lz4cat foo.lz4` is equivalent to `cat file1 file2`.
72*27162e4eSAndroid Build Coastguard Worker
73*27162e4eSAndroid Build Coastguard WorkerOPTIONS
74*27162e4eSAndroid Build Coastguard Worker-------
75*27162e4eSAndroid Build Coastguard Worker
76*27162e4eSAndroid Build Coastguard Worker### Short commands concatenation
77*27162e4eSAndroid Build Coastguard Worker
78*27162e4eSAndroid Build Coastguard WorkerIn some cases, some options can be expressed using short command `-x`
79*27162e4eSAndroid Build Coastguard Workeror long command `--long-word`.
80*27162e4eSAndroid Build Coastguard WorkerShort commands can be concatenated together.
81*27162e4eSAndroid Build Coastguard WorkerFor example, `-d -c` is equivalent to `-dc`.
82*27162e4eSAndroid Build Coastguard WorkerLong commands cannot be concatenated. They must be clearly separated by a space.
83*27162e4eSAndroid Build Coastguard Worker
84*27162e4eSAndroid Build Coastguard Worker### Multiple commands
85*27162e4eSAndroid Build Coastguard Worker
86*27162e4eSAndroid Build Coastguard WorkerWhen multiple contradictory commands are issued on a same command line,
87*27162e4eSAndroid Build Coastguard Workeronly the latest one will be applied.
88*27162e4eSAndroid Build Coastguard Worker
89*27162e4eSAndroid Build Coastguard Worker### Operation mode
90*27162e4eSAndroid Build Coastguard Worker
91*27162e4eSAndroid Build Coastguard Worker* `-z` `--compress`:
92*27162e4eSAndroid Build Coastguard Worker  Compress.
93*27162e4eSAndroid Build Coastguard Worker  This is the default operation mode when no operation mode option is
94*27162e4eSAndroid Build Coastguard Worker  specified, no other operation mode is implied from the command name
95*27162e4eSAndroid Build Coastguard Worker  (for example, `unlz4` implies `--decompress`),
96*27162e4eSAndroid Build Coastguard Worker  nor from the input file name
97*27162e4eSAndroid Build Coastguard Worker  (for example, a file extension `.lz4` implies  `--decompress` by default).
98*27162e4eSAndroid Build Coastguard Worker  `-z` can also be used to force compression of an already compressed
99*27162e4eSAndroid Build Coastguard Worker  `.lz4` file.
100*27162e4eSAndroid Build Coastguard Worker
101*27162e4eSAndroid Build Coastguard Worker* `-d` `--decompress` `--uncompress`:
102*27162e4eSAndroid Build Coastguard Worker  Decompress.
103*27162e4eSAndroid Build Coastguard Worker  `--decompress` is also the default operation when the input filename has an
104*27162e4eSAndroid Build Coastguard Worker  `.lz4` extension.
105*27162e4eSAndroid Build Coastguard Worker
106*27162e4eSAndroid Build Coastguard Worker* `-t` `--test`:
107*27162e4eSAndroid Build Coastguard Worker  Test the integrity of compressed `.lz4` files.
108*27162e4eSAndroid Build Coastguard Worker  The decompressed data is discarded.
109*27162e4eSAndroid Build Coastguard Worker  No files are created nor removed.
110*27162e4eSAndroid Build Coastguard Worker
111*27162e4eSAndroid Build Coastguard Worker* `-b#`:
112*27162e4eSAndroid Build Coastguard Worker  Benchmark mode, using `#` compression level.
113*27162e4eSAndroid Build Coastguard Worker
114*27162e4eSAndroid Build Coastguard Worker* `--list`:
115*27162e4eSAndroid Build Coastguard Worker  List information about .lz4 files.
116*27162e4eSAndroid Build Coastguard Worker  For detailed information on files with multiple frames, use `-v`.
117*27162e4eSAndroid Build Coastguard Worker  `--list` automatically triggers `-m` modifier.
118*27162e4eSAndroid Build Coastguard Worker
119*27162e4eSAndroid Build Coastguard Worker### Operation modifiers
120*27162e4eSAndroid Build Coastguard Worker
121*27162e4eSAndroid Build Coastguard Worker* `-#`:
122*27162e4eSAndroid Build Coastguard Worker  Compression level, with # being any value from 1 to 12.
123*27162e4eSAndroid Build Coastguard Worker  Higher values trade compression speed for compression ratio.
124*27162e4eSAndroid Build Coastguard Worker  Values above 12 are considered the same as 12.
125*27162e4eSAndroid Build Coastguard Worker  Recommended values are 1 for fast compression (default),
126*27162e4eSAndroid Build Coastguard Worker  and 9 for high compression.
127*27162e4eSAndroid Build Coastguard Worker  Speed/compression trade-off will vary depending on data to compress.
128*27162e4eSAndroid Build Coastguard Worker  Decompression speed remains fast at all settings.
129*27162e4eSAndroid Build Coastguard Worker
130*27162e4eSAndroid Build Coastguard Worker* `--fast[=#]`:
131*27162e4eSAndroid Build Coastguard Worker  Switch to ultra-fast compression levels.
132*27162e4eSAndroid Build Coastguard Worker  The higher the value, the faster the compression speed, at the cost of some compression ratio.
133*27162e4eSAndroid Build Coastguard Worker  If `=#` is not present, it defaults to `1`.
134*27162e4eSAndroid Build Coastguard Worker  This setting overrides compression level if one was set previously.
135*27162e4eSAndroid Build Coastguard Worker  Similarly, if a compression level is set after `--fast`, it overrides it.
136*27162e4eSAndroid Build Coastguard Worker
137*27162e4eSAndroid Build Coastguard Worker* `--best`:
138*27162e4eSAndroid Build Coastguard Worker  Set highest compression level. Same as -12.
139*27162e4eSAndroid Build Coastguard Worker
140*27162e4eSAndroid Build Coastguard Worker* `-T#`, `--threads=#`:
141*27162e4eSAndroid Build Coastguard Worker  Use `#` threads for compression.
142*27162e4eSAndroid Build Coastguard Worker  When `0`, or none provided: automatically determined from nb of detected cores.
143*27162e4eSAndroid Build Coastguard Worker
144*27162e4eSAndroid Build Coastguard Worker* `--favor-decSpeed`:
145*27162e4eSAndroid Build Coastguard Worker  Generate compressed data optimized for decompression speed.
146*27162e4eSAndroid Build Coastguard Worker  Compressed data will be larger as a consequence (typically by ~0.5%),
147*27162e4eSAndroid Build Coastguard Worker  while decompression speed will be improved by 5-20%, depending on use cases.
148*27162e4eSAndroid Build Coastguard Worker  This option only works in combination with very high compression levels (>=10).
149*27162e4eSAndroid Build Coastguard Worker
150*27162e4eSAndroid Build Coastguard Worker* `-D dictionaryName`:
151*27162e4eSAndroid Build Coastguard Worker  Compress, decompress or benchmark using dictionary _dictionaryName_.
152*27162e4eSAndroid Build Coastguard Worker  Compression and decompression must use the same dictionary to be compatible.
153*27162e4eSAndroid Build Coastguard Worker  Using a different dictionary during decompression will either
154*27162e4eSAndroid Build Coastguard Worker  abort due to decompression error, or generate a checksum error.
155*27162e4eSAndroid Build Coastguard Worker
156*27162e4eSAndroid Build Coastguard Worker* `-f` `--[no-]force`:
157*27162e4eSAndroid Build Coastguard Worker  This option has several effects:
158*27162e4eSAndroid Build Coastguard Worker
159*27162e4eSAndroid Build Coastguard Worker  If the target file already exists, overwrite it without prompting.
160*27162e4eSAndroid Build Coastguard Worker
161*27162e4eSAndroid Build Coastguard Worker  When used with `--decompress` and `lz4` cannot recognize the type of
162*27162e4eSAndroid Build Coastguard Worker  the source file, copy the source file as is to standard output.
163*27162e4eSAndroid Build Coastguard Worker  This allows `lz4cat --force` to be used like `cat (1)` for files
164*27162e4eSAndroid Build Coastguard Worker  that have not been compressed with `lz4`.
165*27162e4eSAndroid Build Coastguard Worker
166*27162e4eSAndroid Build Coastguard Worker* `-c` `--stdout` `--to-stdout`:
167*27162e4eSAndroid Build Coastguard Worker  Force write to standard output, even if it is the console.
168*27162e4eSAndroid Build Coastguard Worker
169*27162e4eSAndroid Build Coastguard Worker* `-m` `--multiple`:
170*27162e4eSAndroid Build Coastguard Worker  Multiple input files.
171*27162e4eSAndroid Build Coastguard Worker  Compressed file names will be appended a `.lz4` suffix.
172*27162e4eSAndroid Build Coastguard Worker  This mode also reduces notification level.
173*27162e4eSAndroid Build Coastguard Worker  Can also be used to list multiple files.
174*27162e4eSAndroid Build Coastguard Worker  `lz4 -m` has a behavior equivalent to `gzip -k`
175*27162e4eSAndroid Build Coastguard Worker  (it preserves source files by default).
176*27162e4eSAndroid Build Coastguard Worker
177*27162e4eSAndroid Build Coastguard Worker* `-r` :
178*27162e4eSAndroid Build Coastguard Worker  operate recursively on directories.
179*27162e4eSAndroid Build Coastguard Worker  This mode also sets `-m` (multiple input files).
180*27162e4eSAndroid Build Coastguard Worker
181*27162e4eSAndroid Build Coastguard Worker* `-B#`:
182*27162e4eSAndroid Build Coastguard Worker  Block size \[4-7\](default : 7)<br/>
183*27162e4eSAndroid Build Coastguard Worker  `-B4`= 64KB ; `-B5`= 256KB ; `-B6`= 1MB ; `-B7`= 4MB
184*27162e4eSAndroid Build Coastguard Worker
185*27162e4eSAndroid Build Coastguard Worker* `-BI`:
186*27162e4eSAndroid Build Coastguard Worker  Produce independent blocks (default)
187*27162e4eSAndroid Build Coastguard Worker
188*27162e4eSAndroid Build Coastguard Worker* `-BD`:
189*27162e4eSAndroid Build Coastguard Worker  Blocks depend on predecessors (improves compression ratio, more noticeable on small blocks)
190*27162e4eSAndroid Build Coastguard Worker
191*27162e4eSAndroid Build Coastguard Worker* `-BX`:
192*27162e4eSAndroid Build Coastguard Worker  Generate block checksums (default:disabled)
193*27162e4eSAndroid Build Coastguard Worker
194*27162e4eSAndroid Build Coastguard Worker* `--[no-]frame-crc`:
195*27162e4eSAndroid Build Coastguard Worker  Select frame checksum (default:enabled)
196*27162e4eSAndroid Build Coastguard Worker
197*27162e4eSAndroid Build Coastguard Worker* `--no-crc`:
198*27162e4eSAndroid Build Coastguard Worker  Disable both frame and block checksums
199*27162e4eSAndroid Build Coastguard Worker
200*27162e4eSAndroid Build Coastguard Worker* `--[no-]content-size`:
201*27162e4eSAndroid Build Coastguard Worker  Header includes original size (default:not present)<br/>
202*27162e4eSAndroid Build Coastguard Worker  Note : this option can only be activated when the original size can be
203*27162e4eSAndroid Build Coastguard Worker  determined, hence for a file. It won't work with unknown source size,
204*27162e4eSAndroid Build Coastguard Worker  such as stdin or pipe.
205*27162e4eSAndroid Build Coastguard Worker
206*27162e4eSAndroid Build Coastguard Worker* `--[no-]sparse`:
207*27162e4eSAndroid Build Coastguard Worker  Sparse mode support (default:enabled on file, disabled on stdout)
208*27162e4eSAndroid Build Coastguard Worker
209*27162e4eSAndroid Build Coastguard Worker* `-l`:
210*27162e4eSAndroid Build Coastguard Worker  Use Legacy format (typically for Linux Kernel compression)<br/>
211*27162e4eSAndroid Build Coastguard Worker  Note : `-l` is not compatible with `-m` (`--multiple`) nor `-r`
212*27162e4eSAndroid Build Coastguard Worker
213*27162e4eSAndroid Build Coastguard Worker### Other options
214*27162e4eSAndroid Build Coastguard Worker
215*27162e4eSAndroid Build Coastguard Worker* `-v` `--verbose`:
216*27162e4eSAndroid Build Coastguard Worker  Verbose mode
217*27162e4eSAndroid Build Coastguard Worker
218*27162e4eSAndroid Build Coastguard Worker* `-q` `--quiet`:
219*27162e4eSAndroid Build Coastguard Worker  Suppress warnings and real-time statistics;
220*27162e4eSAndroid Build Coastguard Worker  specify twice to suppress errors too
221*27162e4eSAndroid Build Coastguard Worker
222*27162e4eSAndroid Build Coastguard Worker* `-h` `-H` `--help`:
223*27162e4eSAndroid Build Coastguard Worker  Display help/long help and exit
224*27162e4eSAndroid Build Coastguard Worker
225*27162e4eSAndroid Build Coastguard Worker* `-V` `--version`:
226*27162e4eSAndroid Build Coastguard Worker  Display Version number and exit
227*27162e4eSAndroid Build Coastguard Worker
228*27162e4eSAndroid Build Coastguard Worker* `-k` `--keep`:
229*27162e4eSAndroid Build Coastguard Worker  Preserve source files (default behavior)
230*27162e4eSAndroid Build Coastguard Worker
231*27162e4eSAndroid Build Coastguard Worker* `--rm` :
232*27162e4eSAndroid Build Coastguard Worker  Delete source files on successful compression or decompression
233*27162e4eSAndroid Build Coastguard Worker
234*27162e4eSAndroid Build Coastguard Worker* `--` :
235*27162e4eSAndroid Build Coastguard Worker  Treat all subsequent arguments as files
236*27162e4eSAndroid Build Coastguard Worker
237*27162e4eSAndroid Build Coastguard Worker
238*27162e4eSAndroid Build Coastguard Worker### Benchmark mode
239*27162e4eSAndroid Build Coastguard Worker
240*27162e4eSAndroid Build Coastguard Worker* `-b#`:
241*27162e4eSAndroid Build Coastguard Worker  Benchmark file(s), using # compression level
242*27162e4eSAndroid Build Coastguard Worker
243*27162e4eSAndroid Build Coastguard Worker* `-e#`:
244*27162e4eSAndroid Build Coastguard Worker  Benchmark multiple compression levels, from b# to e# (included)
245*27162e4eSAndroid Build Coastguard Worker
246*27162e4eSAndroid Build Coastguard Worker* `-i#`:
247*27162e4eSAndroid Build Coastguard Worker  Minimum evaluation time in seconds \[1-9\] (default : 3)
248*27162e4eSAndroid Build Coastguard Worker
249*27162e4eSAndroid Build Coastguard Worker
250*27162e4eSAndroid Build Coastguard Worker### Environment Variables
251*27162e4eSAndroid Build Coastguard Worker
252*27162e4eSAndroid Build Coastguard WorkerIt's possible to pass some parameters to `lz4` via environment variables.
253*27162e4eSAndroid Build Coastguard WorkerThis can be useful in situations where `lz4` is known to be invoked (from a script for example) but there is no way to pass `lz4` parameters to influence the compression session.
254*27162e4eSAndroid Build Coastguard WorkerThe environment variable has higher priority than executable default, but lower priority than corresponding runtime command.
255*27162e4eSAndroid Build Coastguard WorkerWhen set as global environment variables, it can be a way to enforce personalized defaults different from the executable set ones.
256*27162e4eSAndroid Build Coastguard Worker
257*27162e4eSAndroid Build Coastguard Worker* `LZ4_CLEVEL`:
258*27162e4eSAndroid Build Coastguard Worker  specify a default compression level that `lz4` employs for compression when no other compression level is specified on command line. Executable default is generally `1`.
259*27162e4eSAndroid Build Coastguard Worker
260*27162e4eSAndroid Build Coastguard Worker* `LZ4_NBWORKERS`:
261*27162e4eSAndroid Build Coastguard Worker  specify a default number of threads that `lz4` will employ for compression. Executable default is generally `0`, which means auto-determined based on local cpu. This functionality is only relevant when `lz4` is compiled with multithreading support. The maximum number of workers is capped at `LZ4_NBWORKERS_MAX` (`200` by default).
262*27162e4eSAndroid Build Coastguard Worker
263*27162e4eSAndroid Build Coastguard Worker
264*27162e4eSAndroid Build Coastguard WorkerBUGS
265*27162e4eSAndroid Build Coastguard Worker----
266*27162e4eSAndroid Build Coastguard Worker
267*27162e4eSAndroid Build Coastguard WorkerReport bugs at: https://github.com/lz4/lz4/issues
268*27162e4eSAndroid Build Coastguard Worker
269*27162e4eSAndroid Build Coastguard Worker
270*27162e4eSAndroid Build Coastguard WorkerAUTHOR
271*27162e4eSAndroid Build Coastguard Worker------
272*27162e4eSAndroid Build Coastguard Worker
273*27162e4eSAndroid Build Coastguard WorkerYann Collet
274