Blame bzip2.txt

Packit 71fd91
Packit 71fd91
NAME
Packit 71fd91
       bzip2, bunzip2 - a block-sorting file compressor, v1.0.6
Packit 71fd91
       bzcat - decompresses files to stdout
Packit 71fd91
       bzip2recover - recovers data from damaged bzip2 files
Packit 71fd91
Packit 71fd91
Packit 71fd91
SYNOPSIS
Packit 71fd91
       bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ...  ]
Packit 71fd91
       bunzip2 [ -fkvsVL ] [ filenames ...  ]
Packit 71fd91
       bzcat [ -s ] [ filenames ...  ]
Packit 71fd91
       bzip2recover filename
Packit 71fd91
Packit 71fd91
Packit 71fd91
DESCRIPTION
Packit 71fd91
       bzip2  compresses  files  using  the Burrows-Wheeler block
Packit 71fd91
       sorting text compression algorithm,  and  Huffman  coding.
Packit 71fd91
       Compression  is  generally  considerably  better than that
Packit 71fd91
       achieved by more conventional LZ77/LZ78-based compressors,
Packit 71fd91
       and  approaches  the performance of the PPM family of sta-
Packit 71fd91
       tistical compressors.
Packit 71fd91
Packit 71fd91
       The command-line options are deliberately very similar  to
Packit 71fd91
       those of GNU gzip, but they are not identical.
Packit 71fd91
Packit 71fd91
       bzip2  expects  a list of file names to accompany the com-
Packit 71fd91
       mand-line flags.  Each file is replaced  by  a  compressed
Packit 71fd91
       version  of  itself,  with  the  name "original_name.bz2".
Packit 71fd91
       Each compressed file has the same modification date,  per-
Packit 71fd91
       missions, and, when possible, ownership as the correspond-
Packit 71fd91
       ing original, so that these properties  can  be  correctly
Packit 71fd91
       restored  at  decompression  time.   File name handling is
Packit 71fd91
       naive in the sense that there is no mechanism for preserv-
Packit 71fd91
       ing  original file names, permissions, ownerships or dates
Packit 71fd91
       in filesystems which lack these concepts, or have  serious
Packit 71fd91
       file name length restrictions, such as MS-DOS.
Packit 71fd91
Packit 71fd91
       bzip2  and  bunzip2 will by default not overwrite existing
Packit 71fd91
       files.  If you want this to happen, specify the -f flag.
Packit 71fd91
Packit 71fd91
       If no file names  are  specified,  bzip2  compresses  from
Packit 71fd91
       standard  input  to  standard output.  In this case, bzip2
Packit 71fd91
       will decline to write compressed output to a terminal,  as
Packit 71fd91
       this  would  be  entirely  incomprehensible  and therefore
Packit 71fd91
       pointless.
Packit 71fd91
Packit 71fd91
       bunzip2 (or bzip2 -d) decompresses  all  specified  files.
Packit 71fd91
       Files which were not created by bzip2 will be detected and
Packit 71fd91
       ignored, and a warning issued.  bzip2  attempts  to  guess
Packit 71fd91
       the  filename  for  the decompressed file from that of the
Packit 71fd91
       compressed file as follows:
Packit 71fd91
Packit 71fd91
              filename.bz2    becomes   filename
Packit 71fd91
              filename.bz     becomes   filename
Packit 71fd91
              filename.tbz2   becomes   filename.tar
Packit 71fd91
              filename.tbz    becomes   filename.tar
Packit 71fd91
              anyothername    becomes   anyothername.out
Packit 71fd91
Packit 71fd91
       If the file does not end in one of the recognised endings,
Packit 71fd91
       .bz2,  .bz,  .tbz2 or .tbz, bzip2 complains that it cannot
Packit 71fd91
       guess the name of the original file, and uses the original
Packit 71fd91
       name with .out appended.
Packit 71fd91
Packit 71fd91
       As  with compression, supplying no filenames causes decom-
Packit 71fd91
       pression from standard input to standard output.
Packit 71fd91
Packit 71fd91
       bunzip2 will correctly decompress a file which is the con-
Packit 71fd91
       catenation of two or more compressed files.  The result is
Packit 71fd91
       the concatenation of the corresponding uncompressed files.
Packit 71fd91
       Integrity testing (-t) of concatenated compressed files is
Packit 71fd91
       also supported.
Packit 71fd91
Packit 71fd91
       You can also compress or decompress files to the  standard
Packit 71fd91
       output  by giving the -c flag.  Multiple files may be com-
Packit 71fd91
       pressed and decompressed like this.  The resulting outputs
Packit 71fd91
       are  fed  sequentially to stdout.  Compression of multiple
Packit 71fd91
       files in this manner generates a stream containing  multi-
Packit 71fd91
       ple compressed file representations.  Such a stream can be
Packit 71fd91
       decompressed correctly only  by  bzip2  version  0.9.0  or
Packit 71fd91
       later.   Earlier  versions of bzip2 will stop after decom-
Packit 71fd91
       pressing the first file in the stream.
Packit 71fd91
Packit 71fd91
       bzcat (or bzip2 -dc) decompresses all specified  files  to
Packit 71fd91
       the standard output.
Packit 71fd91
Packit 71fd91
       bzip2  will  read arguments from the environment variables
Packit 71fd91
       BZIP2 and BZIP, in  that  order,  and  will  process  them
Packit 71fd91
       before  any  arguments  read  from the command line.  This
Packit 71fd91
       gives a convenient way to supply default arguments.
Packit 71fd91
Packit 71fd91
       Compression is always performed, even  if  the  compressed
Packit 71fd91
       file  is slightly larger than the original.  Files of less
Packit 71fd91
       than about one hundred bytes tend to get larger, since the
Packit 71fd91
       compression  mechanism  has  a  constant  overhead  in the
Packit 71fd91
       region of 50 bytes.  Random data (including the output  of
Packit 71fd91
       most  file  compressors)  is  coded at about 8.05 bits per
Packit 71fd91
       byte, giving an expansion of around 0.5%.
Packit 71fd91
Packit 71fd91
       As a self-check for your  protection,  bzip2  uses  32-bit
Packit 71fd91
       CRCs  to make sure that the decompressed version of a file
Packit 71fd91
       is identical to the original.  This guards against corrup-
Packit 71fd91
       tion  of  the compressed data, and against undetected bugs
Packit 71fd91
       in bzip2 (hopefully very unlikely).  The chances  of  data
Packit 71fd91
       corruption  going  undetected  is  microscopic,  about one
Packit 71fd91
       chance in four billion for each file processed.  Be aware,
Packit 71fd91
       though,  that  the  check occurs upon decompression, so it
Packit 71fd91
       can only tell you that something is wrong.  It can't  help
Packit 71fd91
       you  recover  the original uncompressed data.  You can use
Packit 71fd91
       bzip2recover to try to recover data from damaged files.
Packit 71fd91
Packit 71fd91
       Return values: 0 for a normal exit,  1  for  environmental
Packit 71fd91
       problems  (file not found, invalid flags, I/O errors, &c),
Packit 71fd91
       2 to indicate a corrupt compressed file, 3 for an internal
Packit 71fd91
       consistency error (eg, bug) which caused bzip2 to panic.
Packit 71fd91
Packit 71fd91
Packit 71fd91
OPTIONS
Packit 71fd91
       -c --stdout
Packit 71fd91
              Compress or decompress to standard output.
Packit 71fd91
Packit 71fd91
       -d --decompress
Packit 71fd91
              Force  decompression.  bzip2, bunzip2 and bzcat are
Packit 71fd91
              really the same program,  and  the  decision  about
Packit 71fd91
              what  actions to take is done on the basis of which
Packit 71fd91
              name is used.  This flag overrides that  mechanism,
Packit 71fd91
              and forces bzip2 to decompress.
Packit 71fd91
Packit 71fd91
       -z --compress
Packit 71fd91
              The   complement   to   -d:   forces   compression,
Packit 71fd91
              regardless of the invocation name.
Packit 71fd91
Packit 71fd91
       -t --test
Packit 71fd91
              Check integrity of the specified file(s), but don't
Packit 71fd91
              decompress  them.   This  really  performs  a trial
Packit 71fd91
              decompression and throws away the result.
Packit 71fd91
Packit 71fd91
       -f --force
Packit 71fd91
              Force overwrite of output files.   Normally,  bzip2
Packit 71fd91
              will  not  overwrite  existing  output files.  Also
Packit 71fd91
              forces bzip2 to break hard links to files, which it
Packit 71fd91
              otherwise wouldn't do.
Packit 71fd91
Packit 71fd91
              bzip2  normally  declines to decompress files which
Packit 71fd91
              don't have the  correct  magic  header  bytes.   If
Packit 71fd91
              forced  (-f),  however,  it  will  pass  such files
Packit 71fd91
              through unmodified.  This is how GNU gzip  behaves.
Packit 71fd91
Packit 71fd91
       -k --keep
Packit 71fd91
              Keep  (don't delete) input files during compression
Packit 71fd91
              or decompression.
Packit 71fd91
Packit 71fd91
       -s --small
Packit 71fd91
              Reduce memory usage, for compression, decompression
Packit 71fd91
              and  testing.   Files  are  decompressed and tested
Packit 71fd91
              using a modified algorithm which only requires  2.5
Packit 71fd91
              bytes  per  block byte.  This means any file can be
Packit 71fd91
              decompressed in 2300k of memory,  albeit  at  about
Packit 71fd91
              half the normal speed.
Packit 71fd91
Packit 71fd91
              During  compression,  -s  selects  a  block size of
Packit 71fd91
              200k, which limits memory use to  around  the  same
Packit 71fd91
              figure,  at  the expense of your compression ratio.
Packit 71fd91
              In short, if your  machine  is  low  on  memory  (8
Packit 71fd91
              megabytes  or  less),  use  -s for everything.  See
Packit 71fd91
              MEMORY MANAGEMENT below.
Packit 71fd91
Packit 71fd91
       -q --quiet
Packit 71fd91
              Suppress non-essential warning messages.   Messages
Packit 71fd91
              pertaining  to I/O errors and other critical events
Packit 71fd91
              will not be suppressed.
Packit 71fd91
Packit 71fd91
       -v --verbose
Packit 71fd91
              Verbose mode -- show the compression ratio for each
Packit 71fd91
              file  processed.   Further  -v's  increase the ver-
Packit 71fd91
              bosity level, spewing out lots of information which
Packit 71fd91
              is primarily of interest for diagnostic purposes.
Packit 71fd91
Packit 71fd91
       -L --license -V --version
Packit 71fd91
              Display  the  software  version,  license terms and
Packit 71fd91
              conditions.
Packit 71fd91
Packit 71fd91
       -1 (or --fast) to -9 (or --best)
Packit 71fd91
              Set the block size to 100 k, 200 k ..  900  k  when
Packit 71fd91
              compressing.   Has  no  effect  when decompressing.
Packit 71fd91
              See MEMORY MANAGEMENT below.  The --fast and --best
Packit 71fd91
              aliases  are  primarily for GNU gzip compatibility.
Packit 71fd91
              In particular, --fast doesn't make things  signifi-
Packit 71fd91
              cantly  faster.   And  --best  merely  selects  the
Packit 71fd91
              default behaviour.
Packit 71fd91
Packit 71fd91
       --     Treats all subsequent arguments as file names, even
Packit 71fd91
              if they start with a dash.  This is so you can han-
Packit 71fd91
              dle files with names beginning  with  a  dash,  for
Packit 71fd91
              example: bzip2 -- -myfilename.
Packit 71fd91
Packit 71fd91
       --repetitive-fast --repetitive-best
Packit 71fd91
              These  flags  are  redundant  in versions 0.9.5 and
Packit 71fd91
              above.  They provided some coarse control over  the
Packit 71fd91
              behaviour  of the sorting algorithm in earlier ver-
Packit 71fd91
              sions, which was sometimes useful.  0.9.5 and above
Packit 71fd91
              have  an  improved  algorithm  which  renders these
Packit 71fd91
              flags irrelevant.
Packit 71fd91
Packit 71fd91
Packit 71fd91
MEMORY MANAGEMENT
Packit 71fd91
       bzip2 compresses large files in blocks.   The  block  size
Packit 71fd91
       affects  both  the  compression  ratio  achieved,  and the
Packit 71fd91
       amount of memory needed for compression and decompression.
Packit 71fd91
       The  flags  -1  through  -9  specify  the block size to be
Packit 71fd91
       100,000 bytes through 900,000 bytes (the default)  respec-
Packit 71fd91
       tively.   At  decompression  time, the block size used for
Packit 71fd91
       compression is read from  the  header  of  the  compressed
Packit 71fd91
       file, and bunzip2 then allocates itself just enough memory
Packit 71fd91
       to decompress the file.  Since block sizes are  stored  in
Packit 71fd91
       compressed  files,  it follows that the flags -1 to -9 are
Packit 71fd91
       irrelevant to and so ignored during decompression.
Packit 71fd91
Packit 71fd91
       Compression and decompression requirements, in bytes,  can
Packit 71fd91
       be estimated as:
Packit 71fd91
Packit 71fd91
              Compression:   400k + ( 8 x block size )
Packit 71fd91
Packit 71fd91
              Decompression: 100k + ( 4 x block size ), or
Packit 71fd91
                             100k + ( 2.5 x block size )
Packit 71fd91
Packit 71fd91
       Larger  block  sizes  give  rapidly  diminishing  marginal
Packit 71fd91
       returns.  Most of the compression comes from the first two
Packit 71fd91
       or  three hundred k of block size, a fact worth bearing in
Packit 71fd91
       mind when using bzip2  on  small  machines.   It  is  also
Packit 71fd91
       important  to  appreciate  that  the  decompression memory
Packit 71fd91
       requirement is set at compression time by  the  choice  of
Packit 71fd91
       block size.
Packit 71fd91
Packit 71fd91
       For  files  compressed  with  the default 900k block size,
Packit 71fd91
       bunzip2 will require about 3700 kbytes to decompress.   To
Packit 71fd91
       support decompression of any file on a 4 megabyte machine,
Packit 71fd91
       bunzip2 has an option to  decompress  using  approximately
Packit 71fd91
       half this amount of memory, about 2300 kbytes.  Decompres-
Packit 71fd91
       sion speed is also halved, so you should use  this  option
Packit 71fd91
       only where necessary.  The relevant flag is -s.
Packit 71fd91
Packit 71fd91
       In general, try and use the largest block size memory con-
Packit 71fd91
       straints  allow,  since  that  maximises  the  compression
Packit 71fd91
       achieved.   Compression and decompression speed are virtu-
Packit 71fd91
       ally unaffected by block size.
Packit 71fd91
Packit 71fd91
       Another significant point applies to files which fit in  a
Packit 71fd91
       single  block  --  that  means  most files you'd encounter
Packit 71fd91
       using a large block  size.   The  amount  of  real  memory
Packit 71fd91
       touched is proportional to the size of the file, since the
Packit 71fd91
       file is smaller than a block.  For example, compressing  a
Packit 71fd91
       file  20,000  bytes  long  with the flag -9 will cause the
Packit 71fd91
       compressor to allocate around 7600k of  memory,  but  only
Packit 71fd91
       touch 400k + 20000 * 8 = 560 kbytes of it.  Similarly, the
Packit 71fd91
       decompressor will allocate 3700k but  only  touch  100k  +
Packit 71fd91
       20000 * 4 = 180 kbytes.
Packit 71fd91
Packit 71fd91
       Here  is a table which summarises the maximum memory usage
Packit 71fd91
       for different block sizes.  Also  recorded  is  the  total
Packit 71fd91
       compressed  size for 14 files of the Calgary Text Compres-
Packit 71fd91
       sion Corpus totalling 3,141,622 bytes.  This column  gives
Packit 71fd91
       some  feel  for  how  compression  varies with block size.
Packit 71fd91
       These figures tend to understate the advantage  of  larger
Packit 71fd91
       block  sizes  for  larger files, since the Corpus is domi-
Packit 71fd91
       nated by smaller files.
Packit 71fd91
Packit 71fd91
                  Compress   Decompress   Decompress   Corpus
Packit 71fd91
           Flag     usage      usage       -s usage     Size
Packit 71fd91
Packit 71fd91
            -1      1200k       500k         350k      914704
Packit 71fd91
            -2      2000k       900k         600k      877703
Packit 71fd91
            -3      2800k      1300k         850k      860338
Packit 71fd91
            -4      3600k      1700k        1100k      846899
Packit 71fd91
            -5      4400k      2100k        1350k      845160
Packit 71fd91
            -6      5200k      2500k        1600k      838626
Packit 71fd91
            -7      6100k      2900k        1850k      834096
Packit 71fd91
            -8      6800k      3300k        2100k      828642
Packit 71fd91
            -9      7600k      3700k        2350k      828642
Packit 71fd91
Packit 71fd91
Packit 71fd91
RECOVERING DATA FROM DAMAGED FILES
Packit 71fd91
       bzip2 compresses files in blocks, usually 900kbytes  long.
Packit 71fd91
       Each block is handled independently.  If a media or trans-
Packit 71fd91
       mission error causes a multi-block  .bz2  file  to  become
Packit 71fd91
       damaged,  it  may  be  possible  to  recover data from the
Packit 71fd91
       undamaged blocks in the file.
Packit 71fd91
Packit 71fd91
       The compressed representation of each block  is  delimited
Packit 71fd91
       by  a  48-bit pattern, which makes it possible to find the
Packit 71fd91
       block boundaries with reasonable  certainty.   Each  block
Packit 71fd91
       also  carries its own 32-bit CRC, so damaged blocks can be
Packit 71fd91
       distinguished from undamaged ones.
Packit 71fd91
Packit 71fd91
       bzip2recover is a  simple  program  whose  purpose  is  to
Packit 71fd91
       search  for blocks in .bz2 files, and write each block out
Packit 71fd91
       into its own .bz2 file.  You can then use bzip2 -t to test
Packit 71fd91
       the integrity of the resulting files, and decompress those
Packit 71fd91
       which are undamaged.
Packit 71fd91
Packit 71fd91
       bzip2recover takes a single argument, the name of the dam-
Packit 71fd91
       aged    file,    and    writes    a    number   of   files
Packit 71fd91
       "rec00001file.bz2",  "rec00002file.bz2",  etc,  containing
Packit 71fd91
       the   extracted   blocks.   The   output   filenames   are
Packit 71fd91
       designed  so  that the use of wildcards in subsequent pro-
Packit 71fd91
       cessing  -- for example, "bzip2 -dc  rec*file.bz2 > recov-
Packit 71fd91
       ered_data" -- processes the files in the correct order.
Packit 71fd91
Packit 71fd91
       bzip2recover should be of most use dealing with large .bz2
Packit 71fd91
       files,  as  these will contain many blocks.  It is clearly
Packit 71fd91
       futile to use it on damaged single-block  files,  since  a
Packit 71fd91
       damaged  block  cannot  be recovered.  If you wish to min-
Packit 71fd91
       imise any potential data loss through media  or  transmis-
Packit 71fd91
       sion errors, you might consider compressing with a smaller
Packit 71fd91
       block size.
Packit 71fd91
Packit 71fd91
Packit 71fd91
PERFORMANCE NOTES
Packit 71fd91
       The sorting phase of compression gathers together  similar
Packit 71fd91
       strings  in  the  file.  Because of this, files containing
Packit 71fd91
       very long runs of  repeated  symbols,  like  "aabaabaabaab
Packit 71fd91
       ..."   (repeated  several hundred times) may compress more
Packit 71fd91
       slowly than normal.  Versions 0.9.5 and  above  fare  much
Packit 71fd91
       better  than previous versions in this respect.  The ratio
Packit 71fd91
       between worst-case and average-case compression time is in
Packit 71fd91
       the  region  of  10:1.  For previous versions, this figure
Packit 71fd91
       was more like 100:1.  You can use the -vvvv option to mon-
Packit 71fd91
       itor progress in great detail, if you want.
Packit 71fd91
Packit 71fd91
       Decompression speed is unaffected by these phenomena.
Packit 71fd91
Packit 71fd91
       bzip2  usually  allocates  several  megabytes of memory to
Packit 71fd91
       operate in, and then charges all over it in a fairly  ran-
Packit 71fd91
       dom  fashion.   This means that performance, both for com-
Packit 71fd91
       pressing and decompressing, is largely determined  by  the
Packit 71fd91
       speed  at  which  your  machine  can service cache misses.
Packit 71fd91
       Because of this, small changes to the code to  reduce  the
Packit 71fd91
       miss  rate  have  been observed to give disproportionately
Packit 71fd91
       large performance improvements.  I imagine bzip2 will per-
Packit 71fd91
       form best on machines with very large caches.
Packit 71fd91
Packit 71fd91
Packit 71fd91
CAVEATS
Packit 71fd91
       I/O  error  messages  are not as helpful as they could be.
Packit 71fd91
       bzip2 tries hard to detect I/O errors  and  exit  cleanly,
Packit 71fd91
       but  the  details  of  what  the problem is sometimes seem
Packit 71fd91
       rather misleading.
Packit 71fd91
Packit 71fd91
       This manual page pertains to version 1.0.6 of bzip2.  Com-
Packit 71fd91
       pressed  data created by this version is entirely forwards
Packit 71fd91
       and  backwards  compatible  with   the   previous   public
Packit 71fd91
       releases,  versions  0.1pl2,  0.9.0,  0.9.5, 1.0.0, 1.0.1,
Packit 71fd91
       1.0.2 and above, but with the  following  exception: 0.9.0
Packit 71fd91
       and above can  correctly decompress  multiple concatenated
Packit 71fd91
       compressed files.  0.1pl2  cannot do this;  it  will  stop
Packit 71fd91
       after  decompressing just the first file in the stream.
Packit 71fd91
Packit 71fd91
       bzip2recover  versions prior to 1.0.2 used 32-bit integers
Packit 71fd91
       to represent bit positions in compressed  files,  so  they
Packit 71fd91
       could  not handle compressed files more than 512 megabytes
Packit 71fd91
       long.  Versions 1.0.2 and above use 64-bit  ints  on  some
Packit 71fd91
       platforms  which  support them (GNU supported targets, and
Packit 71fd91
       Windows).  To establish whether or  not  bzip2recover  was
Packit 71fd91
       built  with  such  a limitation, run it without arguments.
Packit 71fd91
       In any event you can build yourself an  unlimited  version
Packit 71fd91
       if  you  can  recompile  it  with MaybeUInt64 set to be an
Packit 71fd91
       unsigned 64-bit integer.
Packit 71fd91
Packit 71fd91
Packit 71fd91
AUTHOR
Packit 71fd91
       Julian Seward, jsewardbzip.org.
Packit 71fd91
Packit 71fd91
       http://www.bzip.org
Packit 71fd91
Packit 71fd91
       The ideas embodied in bzip2 are due to (at least) the fol-
Packit 71fd91
       lowing  people: Michael Burrows and David Wheeler (for the
Packit 71fd91
       block sorting transformation), David Wheeler  (again,  for
Packit 71fd91
       the Huffman coder), Peter Fenwick (for the structured cod-
Packit 71fd91
       ing model in the original bzip, and many refinements), and
Packit 71fd91
       Alistair  Moffat,  Radford  Neal  and  Ian Witten (for the
Packit 71fd91
       arithmetic  coder  in  the  original  bzip).   I  am  much
Packit 71fd91
       indebted for their help, support and advice.  See the man-
Packit 71fd91
       ual in the source distribution for pointers to sources  of
Packit 71fd91
       documentation.  Christian von Roques encouraged me to look
Packit 71fd91
       for faster sorting algorithms, so as to speed up  compres-
Packit 71fd91
       sion.  Bela Lubkin encouraged me to improve the worst-case
Packit 71fd91
       compression performance.  Donna Robinson XMLised the docu-
Packit 71fd91
       mentation.   The bz* scripts are derived from those of GNU
Packit 71fd91
       gzip.  Many people sent patches, helped  with  portability
Packit 71fd91
       problems,  lent  machines,  gave advice and were generally
Packit 71fd91
       helpful.
Packit 71fd91