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