Introduction to the lzma command line tool ------------------------------------------ Overview The lzma command line tool is similar to gzip and bzip2, but for compressing and uncompressing .lzma files. Supported file formats By default, the tool creates files in the new .lzma format. This can be overriden with --format=FMT command line option. Use --format=alone to create files in the old LZMA_Alone format. By default, the tool uncompresses both the new .lzma format and LZMA_Alone format. This is to make it transparent to switch from the old LZMA_Alone format to the new .lzma format. Since both formats use the same filename suffix, average user should never notice which format was used. Differences to gzip and bzip2 Standard input and output Both gzip and bzip2 refuse to write compressed data to a terminal and read compressed data from a terminal. With gzip (but not with bzip2), this can be overriden with the `--force' option. lzma follows the behavior of gzip here. Usage of LZMA_OPT environment variable gzip and bzip2 read GZIP and BZIP2 environment variables at startup. These variables may contain extra command line options. gzip and bzip2 allow passing not only options, but also end-of-options indicator (`--') and filenames via the environment variable. No quoting is supported with the filenames. Here are examples with gzip. bzip2 behaves identically. bash$ echo asdf > 'foo bar' bash$ GZIP='"foo bar"' gzip gzip: "foo: No such file or directory gzip: bar": No such file or directory bash$ GZIP=-- gzip --help gzip: --help: No such file or directory lzma silently ignores all non-option arguments given via the environment variable LZMA_OPT. Like on the command line, everything after `--' is taken as non-options, and thus ignored in LZMA_OPT. bash$ LZMA_OPT='--help' lzma --version # Displays help bash$ LZMA_OPT='-- --help' lzma --version # Displays version Filter chain presets Like in gzip and bzip2, lzma supports numbered presets from 1 to 9 where 1 is the fastest and 9 the best compression. 1 and 2 are for fast compressing with small memory usage, 3 to 6 for good compression ratio with medium memory usage, and 7 to 9 for excellent compression ratio with higher memory requirements. The default is 7 if memory usage limit allows. In future, there will probably be an option like --preset=NAME, which will contain more special presets for specific file types. It's also possible that there will be some heuristics to select good filters. For example, the tool could detect when a .tar archive is being compressed, and enable x86 filter only for those files in the .tar archive that are ELF or PE executables for x86. Specifying custom filter chains Custom filter chains are specified by using long options with the name of the filters in correct order. For example, to pass the input data to the x86 filter and the output of that to the LZMA filter, the following command will do: lzma --x86 --lzma filename Some filters accept options, which are specified as a comma-separated list of key=value pairs: lzma --delta=distance=4 --lzma=dict=4Mi,lc=8,lp=2 filename Memory usage control By default, the command line tool limits memory usage to 1/3 of the available physical RAM. If no preset or custom filter chain has been given, the default preset will be used. If the memory limit is too low for the default preset, the tool will silently switch to lower preset. When a preset or a custom filter chain has been specified and the memory limit is too low, an error message is displayed and no files are processed. If the decoder hits the memory usage limit, an error is displayed and no more files are processed.