bzip2recover

恢复已损bzip2压缩文件中的数据


语法格式

bzip2 [-cdfkqstvz123456789] [files]
bunzip2 [-fksv] [files]
bzcat [-s] [files]
bzip2recover file
bzip2 [-h|--help] [-L|--license] [-V|--version]

命令简介

bzip2命令采用Burrows-Wheeler数据块排序文本压缩算法与Huffman编码压缩指定的文件。其压缩效果通常好于基于LZ77/LZ78算法的压缩工具,性能接近于PPM系列的统计压缩工具。

其中,files是一个或多个文件。如果未指定文件名参数,bzip2将会压缩来自标准输入的数据,把压缩后的结果写到标准输出,但会拒绝把压缩数据写到终端,因为这是完全无法理解的,也是没有意义的,除非重定向到一个文件。在第四种语法格式中,file是已受损的压缩文件。

bzip2的命令行选项非常类似于GNU gzip,但两者并不相同。

bzip2依次压缩命令行中指定的每个文件,然后使用压缩后的文件替换每一个初始文件,压缩文件以初始文件名加“.bz2”后缀(original.bz2)命名。每个压缩文件与相应的初始文件具有相同的修改时间与访问权限,同时尽可能保持相同的文件属主等属性。确保在解压文件时能够正确地恢复上述各种文件属性。

通常,bzip2与bunzip2命令不会覆盖现有的文件。如果需要覆盖现有的文件,可以在命令行中指定“-f”选项。

bunzip2或“bzip2 -d”命令用于解压指定的所有文件。如果指定的文件并非bzip2命令创建的,bunzip2或“bzip2 -d”命令不会处理,但会输出一条忽略相应文件的错误信息。通常,bzip2 将会按照下列方式命名压缩文件解压后的文件名:

filename.bz2  filename

filename.bz  filename

filename.tbz2  filename.tar

filename.tbz  filename.tar

othername  othername.out

如果文件的后缀并非.bz2、.bz、.tbz2或.tbz等能够识别的扩展名之一,则bzip2使用初始的文件名加.out后缀作为文件名参数。

bzcat或“bzip2 -dc”命令将会解压指定的所有文件,把解压结果写到标准输出。

在开始压缩或解压之前,bzip2将会依次从BZIP2与BZIP环境变量中读取命令选项及其参数。在读取任何命令行选项及其参数之前,首先处理环境变量预定义的选项及其参数。这种机制为用户使用默认选项及其参数提供了方便。

即使压缩后的文件稍微大于压缩前的文件,压缩也总是执行。如果文件小于100字节,压缩后的文件肯定大于压缩前的文件,因为压缩算法通常需要有一个约50字节的常规开销。

作为一种自检与保护机制,bzip2使用32位的CRC校验和,确保压缩后的文件等同于初始的文件,保护压缩后的数据不致受损。压缩后数据受损的机会微乎其微,其概率是40亿分之一。尽管如此,bzip2解压时仍会做必要的检测。如果压缩文件已经受损,可以使用bzip2recover命令尝试恢复已受损的压缩文件中的数据。

bzip2以数据块为单位压缩文件,每个数据块通常为900KB,独立处理。如果因介质或传输错误等原因导致压缩文件受损,可以从未受损的数据块中恢复部分数据。

bzip2recover命令用于检索压缩文件中的每一个数据块,把抽取的每个数据块写到rec00001file.bz2、rec00002file.bz2等一系列单独的文件中。其中,file是压缩文件去掉“.bz2”后缀的文件名。

最后,利用“bzip2 -dc rec*file.bz2 > recovered-data”命令,可以按照正确的顺序,把恢复后的数据块连接到一起,形成一个文件。

命令选项

-c, --stdout  把压缩或解压结果写到标准输出。采用这种方式可以同时压缩或解压多个文件,把压缩或解压结果连续地写到标准输出。

-d, --decompress  强制解压模式。bzip2、bunzip2和bzcat实为同一个程序,至于究竟采取什么处理动作,取决于使用的是哪一个名字。这个选项强制bzip2解压指定的文件。

-f, --force  强制覆盖输出文件,或强制删除现有的文件。通常,bzip2不会覆盖现有的同名文件,除非指定了“-f”选项。而且,bzip2拒绝解压魔术(magic)代码不正确的文件。但是,如果指定了“-f”选项,bzip2将会不加修改地复制这样的文件(这也是GNU gzip的处理方式)。

-k, --keep  在压缩或解压文件时,保持输入文件不变(即不删除输入文件)。

-q, --quiet  禁止输出不重要的警示信息。但不限制输出I/O错误或其他严重事件之类的信息。

-s, --small  在压缩、解压或检测期间,减少内存的使用。

-t, --test  检测指定文件的完整性而不执行解压动作。这仅仅是一个试解压过程,最终会扔掉解压结果。

-v, --verbose  详细显示模式。显示正在处理的每个文件的压缩率。同时增加了输出数据的详细程度,其主要目的是输出大量的信息供诊断使用。

-z, --compress  强制压缩模式。与“-d”选项相反,不管调用哪一个名字,均强制执行压缩动作。

-1 (--fast) ~ -9 (--best)  设置压缩时使用的数据块的大小,其中“-1”至“-9”分别表示100KB至900KB。注意,这些选项对解压没有任何影响。“--fast”与“--best”选项主要是为保持与GNU gzip兼容而保留的别名。尤其是“--fast”选项并不意味着压缩速度更快,“--best”选项也只是选择默认的处理方式而已。

--  选项终止标志。表示此后的任何参数均作为文件名处理,即使其首字符为“-”。主要用于处理文件名的首字符为“-”的文件。例如,“bzip2 -- -filename”。

应用实例

1. 压缩指定的文件,观察文件的压缩比等信息。

$ bzip2 -v test1 test2
  nmap:         3.549:1,  2.254 bits/byte, 71.82% saved, 162458 in, 45780 out.
tcpdump:        3.147:1,  2.542 bits/byte, 68.22% saved, 55967 in, 17787 out.
$

2. 检测压缩文件的完整性。

$ bunzip2 -tv nmap.bz2 tcpdump.bz2
  nmap.bz2:     ok
  tcpdump.bz2:  ok
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z