bzip2.1
上传用户:zswatin
上传日期:2007-01-06
资源大小:440k
文件大小:14k
源码类别:

压缩解压

开发平台:

C/C++

  1. .PU
  2. .TH bzip2 1
  3. .SH NAME
  4. bzip2, bunzip2 - a block-sorting file compressor, v0.9.0
  5. .br
  6. bzcat - decompresses files to stdout
  7. .br
  8. bzip2recover - recovers data from damaged bzip2 files
  9. .SH SYNOPSIS
  10. .ll +8
  11. .B bzip2
  12. .RB [ " -cdfkstvzVL123456789 " ]
  13. [
  14. .I "filenames &..."
  15. ]
  16. .ll -8
  17. .br
  18. .B bunzip2
  19. .RB [ " -fkvsVL " ]
  20. [
  21. .I "filenames &..."
  22. ]
  23. .br 
  24. .B bzcat
  25. .RB [ " -s " ]
  26. [
  27. .I "filenames &..."
  28. ]
  29. .br
  30. .B bzip2recover
  31. .I "filename"
  32. .SH DESCRIPTION
  33. .I bzip2
  34. compresses files using the Burrows-Wheeler block-sorting 
  35. text compression algorithm, and Huffman coding.
  36. Compression is generally considerably
  37. better than that 
  38. achieved by more conventional LZ77/LZ78-based compressors,
  39. and approaches the performance of the PPM family of statistical
  40. compressors.
  41. The command-line options are deliberately very similar to 
  42. those of 
  43. .I GNU Gzip,
  44. but they are not identical.
  45. .I bzip2 
  46. expects a list of file names to accompany the command-line flags.  
  47. Each file is replaced by a compressed version of itself,
  48. with the name "original_name.bz2".
  49. Each compressed file has the same modification date and permissions
  50. as the corresponding original, so that these properties can be 
  51. correctly restored at decompression time.  File name handling is
  52. naive in the sense that there is no mechanism for preserving
  53. original file names, permissions and dates in filesystems 
  54. which lack these concepts, or have serious file name length
  55. restrictions, such as MS-DOS.
  56. .I bzip2
  57. and
  58. .I bunzip2
  59. will by default not overwrite existing files; 
  60. if you want this to happen, specify the -f flag.
  61. If no file names are specified,
  62. .I bzip2
  63. compresses from standard input to standard output.
  64. In this case,
  65. .I bzip2
  66. will decline to write compressed output to a terminal, as
  67. this would be entirely incomprehensible and therefore pointless.
  68. .I bunzip2
  69. (or
  70. .I bzip2 -d
  71. ) decompresses and restores all specified files whose names
  72. end in ".bz2".
  73. Files without this suffix are ignored.  
  74. Again, supplying no filenames
  75. causes decompression from standard input to standard output.
  76. .I bunzip2
  77. will correctly decompress a file which is the concatenation
  78. of two or more compressed files.  The result is the concatenation
  79. of the corresponding uncompressed files.  Integrity testing
  80. (-t) of concatenated compressed files is also supported.
  81. You can also compress or decompress files to
  82. the standard output by giving the -c flag.
  83. Multiple files may be compressed and decompressed like this.
  84. The resulting outputs are fed sequentially to stdout.
  85. Compression of multiple files in this manner generates
  86. a stream containing multiple compressed file representations.
  87. Such a stream can be decompressed correctly only by
  88. .I bzip2
  89. version 0.9.0 or later.  Earlier versions of
  90. .I bzip2
  91. will stop after decompressing the first file in the stream.
  92. .I bzcat
  93. (or
  94. .I bzip2 -dc
  95. ) decompresses all specified files to the standard output.
  96. Compression is always performed, even if the compressed file is
  97. slightly larger than the original.  Files of less than about
  98. one hundred bytes tend to get larger, since the compression 
  99. mechanism has a constant overhead in the region of 50 bytes.
  100. Random data (including the output of most file compressors)
  101. is coded at about 8.05 bits per byte, giving an expansion of 
  102. around 0.5%.
  103. As a self-check for your protection,
  104. .I bzip2
  105. uses 32-bit CRCs to make sure that the decompressed
  106. version of a file is identical to the original.  
  107. This guards against corruption of the compressed data,
  108. and against undetected bugs in
  109. .I bzip2
  110. (hopefully very unlikely).
  111. The chances of data corruption going undetected is 
  112. microscopic, about one chance in four billion
  113. for each file processed.  Be aware, though, that the check
  114. occurs upon decompression, so it can only tell you that
  115. that something is wrong.  It can't help you recover the
  116. original uncompressed data.
  117. You can use
  118. .I bzip2recover
  119. to try to recover data from damaged files.
  120. Return values: 
  121. 0 for a normal exit, 
  122. 1 for environmental
  123. problems (file not found, invalid flags, I/O errors, &c),
  124. 2 to indicate a corrupt compressed file,
  125. 3 for an internal consistency error (eg, bug) which caused
  126. .I bzip2 
  127. to panic.
  128. .SH MEMORY MANAGEMENT
  129. .I Bzip2
  130. compresses large files in blocks.  The block size affects both the 
  131. compression ratio achieved, and the amount of memory needed both for
  132. compression and decompression.  The flags -1 through -9
  133. specify the block size to be 100,000 bytes through 900,000 bytes
  134. (the default) respectively.  At decompression-time, the block size used for
  135. compression is read from the header of the compressed file, and
  136. .I bunzip2
  137. then allocates itself just enough memory to decompress the file.
  138. Since block sizes are stored in compressed files, it follows that the flags
  139. -1 to -9
  140. are irrelevant to and so ignored during decompression.
  141. Compression and decompression requirements, in bytes, can be estimated as:
  142.       Compression:   400k + ( 7 x block size )
  143.       Decompression: 100k + ( 4 x block size ), or
  144. .br
  145.                      100k + ( 2.5 x block size )
  146. Larger block sizes give rapidly diminishing marginal returns; most
  147. of the 
  148. compression comes from the first two or three hundred k of block size,
  149. a fact worth bearing in mind when using 
  150. .I bzip2
  151. on small machines.  It is also important to appreciate that the
  152. decompression memory requirement is set at compression-time by the
  153. choice of block size.
  154. For files compressed with the default 900k block size, 
  155. .I bunzip2
  156. will require about 3700 kbytes to decompress.
  157. To support decompression of any file on a 4 megabyte machine,
  158. .I bunzip2
  159. has an option to decompress using approximately half this
  160. amount of memory, about 2300 kbytes.  Decompression speed is
  161. also halved, so you should use this option only where necessary.
  162. The relevant flag is -s.
  163. In general, try and use the largest block size
  164. memory constraints allow, since that maximises the compression
  165. achieved.  Compression and decompression
  166. speed are virtually unaffected by block size.
  167. Another significant point applies to files which fit in a single
  168. block -- that means most files you'd encounter using a large 
  169. block size.  The amount of real memory touched is proportional
  170. to the size of the file, since the file is smaller than a block.
  171. For example, compressing a file 20,000 bytes long with the flag
  172. -9
  173. will cause the compressor to allocate around
  174. 6700k of memory, but only touch 400k + 20000 * 7 = 540
  175. kbytes of it.  Similarly, the decompressor will allocate 3700k but
  176. only touch 100k + 20000 * 4 = 180 kbytes.
  177. Here is a table which summarises the maximum memory usage for 
  178. different block sizes.  Also recorded is the total compressed
  179. size for 14 files of the Calgary Text Compression Corpus
  180. totalling 3,141,622 bytes.  This column gives some feel for how
  181. compression varies with block size.  These figures tend to understate
  182. the advantage of larger block sizes for larger files, since the
  183. Corpus is dominated by smaller files.
  184.            Compress   Decompress   Decompress   Corpus
  185.     Flag     usage      usage       -s usage     Size
  186.      -1      1100k       500k         350k      914704
  187.      -2      1800k       900k         600k      877703
  188.      -3      2500k      1300k         850k      860338
  189.      -4      3200k      1700k        1100k      846899
  190.      -5      3900k      2100k        1350k      845160
  191.      -6      4600k      2500k        1600k      838626
  192.      -7      5400k      2900k        1850k      834096
  193.      -8      6000k      3300k        2100k      828642
  194.      -9      6700k      3700k        2350k      828642
  195. .SH OPTIONS
  196. .TP
  197. .B -c --stdout
  198. Compress or decompress to standard output.  -c will decompress
  199. multiple files to stdout, but will only compress a single file to
  200. stdout.
  201. .TP
  202. .B -d --decompress
  203. Force decompression.
  204. .I bzip2,
  205. .I bunzip2
  206. and
  207. .I bzcat
  208. are really the same program, and the decision about what actions
  209. to take is done on the basis of which name is
  210. used.  This flag overrides that mechanism, and forces
  211. .I bzip2
  212. to decompress.
  213. .TP 
  214. .B -z --compress
  215. The complement to -d: forces compression, regardless of the invokation
  216. name.
  217. .TP
  218. .B -t --test
  219. Check integrity of the specified file(s), but don't decompress them.
  220. This really performs a trial decompression and throws away the result.
  221. .TP
  222. .B -f --force
  223. Force overwrite of output files.  Normally,
  224. .I bzip2
  225. will not overwrite existing output files.
  226. .TP
  227. .B -k --keep
  228. Keep (don't delete) input files during compression or decompression.
  229. .TP
  230. .B -s --small
  231. Reduce memory usage, for compression, decompression and
  232. testing.
  233. Files are decompressed and tested using a modified algorithm which only
  234. requires 2.5 bytes per block byte.  This means any file can be
  235. decompressed in 2300k of memory, albeit at about half the normal
  236. speed.
  237. During compression, -s selects a block size of 200k, which limits
  238. memory use to around the same figure, at the expense of your
  239. compression ratio.  In short, if your machine is low on memory
  240. (8 megabytes or less), use -s for everything.  See
  241. MEMORY MANAGEMENT above.
  242. .TP
  243. .B -v --verbose
  244. Verbose mode -- show the compression ratio for each file processed.
  245. Further -v's increase the verbosity level, spewing out lots of
  246. information which is primarily of interest for diagnostic purposes.
  247. .TP
  248. .B -L --license -V --version
  249. Display the software version, license terms and conditions.
  250. .TP
  251. .B -1 to -9 
  252. Set the block size to 100 k, 200 k .. 900 k when
  253. compressing.  Has no effect when decompressing.
  254. See MEMORY MANAGEMENT above.
  255. .TP
  256. .B --repetitive-fast
  257. .I bzip2
  258. injects some small pseudo-random variations
  259. into very repetitive blocks to limit
  260. worst-case performance during compression.
  261. If sorting runs into difficulties, the block
  262. is randomised, and sorting is restarted.  
  263. Very roughly, 
  264. .I bzip2
  265. persists for three times as long as a well-behaved input
  266. would take before resorting to randomisation.
  267. This flag makes it give up much sooner.
  268. .TP
  269. .B --repetitive-best
  270. Opposite of --repetitive-fast; try a lot harder before 
  271. resorting to randomisation.
  272. .SH RECOVERING DATA FROM DAMAGED FILES
  273. .I bzip2
  274. compresses files in blocks, usually 900kbytes long.
  275. Each block is handled independently.  If a media or
  276. transmission error causes a multi-block .bz2 
  277. file to become damaged,
  278. it may be possible to recover data from the undamaged blocks
  279. in the file.  
  280. The compressed representation of each block is delimited by
  281. a 48-bit pattern, which makes it possible to find the block
  282. boundaries with reasonable certainty.  Each block also carries
  283. its own 32-bit CRC, so damaged blocks can be
  284. distinguished from undamaged ones.
  285. .I bzip2recover
  286. is a simple program whose purpose is to search for 
  287. blocks in .bz2 files, and write each block out into
  288. its own .bz2 file.  You can then use
  289. .I bzip2 -t
  290. to test the integrity of the resulting files, 
  291. and decompress those which are undamaged.
  292. .I bzip2recover
  293. takes a single argument, the name of the damaged file,
  294. and writes a number of files "rec0001file.bz2", "rec0002file.bz2",
  295. etc, containing the extracted blocks.  The output filenames
  296. are designed so that the use of wildcards in subsequent processing
  297. -- for example, "bzip2 -dc rec*file.bz2 > recovered_data" --
  298. lists the files in the "right" order.
  299. .I bzip2recover
  300. should be of most use dealing with large .bz2 files, as
  301. these will contain many blocks.  It is clearly futile to
  302. use it on damaged single-block files, since a damaged
  303. block cannot be recovered.  If you wish to minimise 
  304. any potential data loss through media or transmission
  305. errors, you might consider compressing with a smaller
  306. block size.
  307. .SH PERFORMANCE NOTES
  308. The sorting phase of compression gathers together similar strings
  309. in the file.  Because of this, files containing very long 
  310. runs of repeated symbols, like "aabaabaabaab ..." (repeated
  311. several hundred times) may compress extraordinarily slowly.
  312. You can use the
  313. -vvvvv 
  314. option to monitor progress in great detail, if you want.
  315. Decompression speed is unaffected.
  316. Such pathological cases
  317. seem rare in practice, appearing mostly in artificially-constructed
  318. test files, and in low-level disk images.  It may be inadvisable to
  319. use 
  320. .I bzip2
  321. to compress the latter.  
  322. If you do get a file which causes severe slowness in compression,
  323. try making the block size as small as possible, with flag -1.
  324. .I bzip2
  325. usually allocates several megabytes of memory to operate in,
  326. and then charges all over it in a fairly random fashion.  This
  327. means that performance, both for compressing and decompressing,
  328. is largely determined by the speed
  329. at which your machine can service cache misses.  
  330. Because of this, small changes
  331. to the code to reduce the miss rate have been observed to give
  332. disproportionately large performance improvements.
  333. I imagine 
  334. .I bzip2
  335. will perform best on machines with very large caches.
  336. .SH CAVEATS
  337. I/O error messages are not as helpful as they could be.
  338. .I Bzip2
  339. tries hard to detect I/O errors and exit cleanly, but the
  340. details of what the problem is sometimes seem rather misleading.
  341. This manual page pertains to version 0.9.0 of 
  342. .I bzip2.  
  343. Compressed data created by this version is entirely forwards and
  344. backwards compatible with the previous public release, version 0.1pl2,
  345. but with the following exception: 0.9.0 can correctly decompress
  346. multiple concatenated compressed files.  0.1pl2 cannot do this; it
  347. will stop after decompressing just the first file in the stream.
  348. Wildcard expansion for Windows 95 and NT 
  349. is flaky.
  350. .I bzip2recover
  351. uses 32-bit integers to represent bit positions in
  352. compressed files, so it cannot handle compressed files
  353. more than 512 megabytes long.  This could easily be fixed.
  354. .SH AUTHOR
  355. Julian Seward, jseward@acm.org.
  356. http://www.muraroa.demon.co.uk
  357. The ideas embodied in 
  358. .I bzip2
  359. are due to (at least) the following people:
  360. Michael Burrows and David Wheeler (for the block sorting
  361. transformation), David Wheeler (again, for the Huffman coder),
  362. Peter Fenwick (for the structured coding model in the original
  363. .I bzip, 
  364. and many refinements),
  365. and
  366. Alistair Moffat, Radford Neal and Ian Witten (for the arithmetic
  367. coder in the original
  368. .I bzip).  
  369. I am much indebted for their help, support and advice.
  370. See the manual in the source distribution for pointers to
  371. sources of documentation.
  372. Christian von Roques encouraged me to look for faster
  373. sorting algorithms, so as to speed up compression.
  374. Bela Lubkin encouraged me to improve the worst-case
  375. compression performance.
  376. Many people sent patches, helped with portability problems,
  377. lent machines, gave advice and were generally helpful.