当前位置: 首页 > 工具软件 > Bzip2 > 使用案例 >

linux bzip2压缩文件,bzip2命令_Linux bzip2命令:压缩和解压文件(.bz2文件)

柳逸春
2023-12-01

有时候你会发现并不是所有的 Linux 压缩包都是以 .tar.gz 为后缀的,有些压缩包的后缀是 .tar.bz2。这个 .tar.bz2 又是什么呢?它就是本文的主角:bzip2 压缩工具。

有了 gzip 为什么还要重复造轮子

gzip 的 0.1 版本是在 1992 年发布的,而 bzip2 的 0.1 版本是在 1996 年发布的,可见 bzip2 的开发是要晚于 gzip 的。由于 bzip2 与 gzip 相比,其压缩稳定性和效果都更好,所以 bzip2 一经推出,便受到了广大用户的欢迎。

由此可见,这不能算是重复造轮子,bzip2 让世界变得更加美好了。

bzip2 和 bunzip2 是一个东西么

在我们正式开始讲解之前,有一点必须要介绍清楚,那就是 bzip2 和 bunzip2 的关系。

其实从字面意思上我们也能够猜出个大概,bzip2 是用来压缩文件的,而 bunzip2 则是用来解压文件的,类似于 zip 和 unzip 的关系。但是很神奇的一点是,其实 bzip2 和 bunzip2 在 Linux 中是指向完全一样的程序的。

如果你在 Rehdat/Fedora/CentOS 下工作,你会发现 bunzip2 是 bzip2 的一个符号连接。

[roc@roclinux ruanjian]$ ls -Fhl /usr/bin/bunzip2

lrwxrwxrwx. 1 root root 5 2月 7 2012 /usr/bin/bunzip2 -> bzip2*

如果你在 Debian/Ubuntu 下工作,你会发现 bunzip2 和 bzip2 具有相同的 inode 节点,即两者都指向同一个程序。

root@rocubuntu75:~# cat /etc/issue

Ubuntu 14.04.1 LTS \n \l

root@rocubuntu75:~# ls -hl /bin/bunzip2 /bin/bzip2

-rwxr-xr-x 3 root root 31K Oct 21 2013 /bin/bunzip2

-rwxr-xr-x 3 root root 31K Oct 21 2013 /bin/bzip2

root@rocubuntu75:~# ls -i /bin/bunzip2 /bin/bzip2

131078 /bin/bunzip2 131078 /bin/bzip2

但是 bzip2 和 bunzip2 两个命令的行为确实完全迥异,bzip2 只服务于那些“要压缩的文件”,而 bunzip2 则只服务于那些“要解压缩的文件”。

一个程序,改个名竟然就可以有不同的行为,这是怎么实现的?通过阅读 bzip2 软件包的源代码,我们找到了精髓所在。

/* 默认情况下,命令的工作模式是OM_Z,即压缩模式 */

opMode = OM_Z;

/* 如果程序的名字中含有unzip或UNZIP,那么就将命令的工作模式设置成OM_UNZ,即解压模式 */

if ( (strstr ( progName,"unzip" ) != 0) ||

(strstr ( progName,"UNZIP" ) != 0) )

opMode = OM_UNZ;

这下,真相大白于天下啦!

本来不想告诉大家这个小秘密的,因为就好像魔术,一旦揭穿,就会变得索然无味了。哈哈,我们还是抓紧时间进入命令用法环节吧。

掌握 gzip 后 bzip2 无难度

如果你还没有学习 gzip 的话,强烈推荐你先阅读该网站上有关 gzip 的那篇文章。由于 bzip2 命令在用法上和 gzip 大同小异,所以如果你学习过 gzip 的话,那么本文的内容相信你会轻松学懂,毫无难度。

解压一个 .tar.bz2 的文件。

[roc@roclinux ruanjian]$ tar -xjvf curl-7.47.1.tar.bz2

curl-7.47.1/tests/unit/unit1301.c

curl-7.47.1/tests/unit/unit1305.c

curl-7.47.1/tests/unit/Makefile.am

curl-7.47.1/tests/unit/Makefile.in

curl-7.47.1/tests/unit/unit1300.c

(此处省略数百行)

此处的用法和 gzip 几乎一样,唯一的区别就是采用了-j选项。-j选项特指采用 bzip2 方式进行解压缩。

相信你也已经猜到了,打包并压缩的方法,就是 -cjvf,唯一的区别还是那个-j选项而已,我们就不在这里浪费笔墨举例了。

再告诉大家一个小秘密,现在 tar 命令已经足够智能了,我们完全不需要指定解压缩方式,tar 就会根据文件后缀来自动采用匹配的解压方法。

大胆的把-j选项去掉吧,照样可以完美解压:

[roc@roclinux ruanjian]$ tar -xvf curl-7.47.1.tar.bz2

curl-7.47.1/tests/unit/unit1301.c

curl-7.47.1/tests/unit/unit1305.c

curl-7.47.1/tests/unit/Makefile.am

curl-7.47.1/tests/unit/Makefile.in

curl-7.47.1/tests/unit/unit1300.c

(此处省略数百行)

对单个文件压缩和解压

我们用 bzip2 命令和 bunzip2 命令,就可以实现了,来看实例。

#一个文本文件,叫作mynote.txt

[roc@roclinux ruanjian]$ ls -l mynote.txt

-rw-rw-r-- 1 roc roc 96 2月 20 16:49 mynote.txt

#调用bzip2来压缩,压缩后,原来的文件就会消失,只会留下压缩后的文件

[roc@roclinux ruanjian]$ bzip2 mynote.txt

#压缩后的文件会以.bz2结尾

[roc@roclinux ruanjian]$ ls -l mynote.txt.bz2

-rw-rw-r-- 1 roc roc 46 2月 20 16:49 mynote.txt.bz2

#用bunzip2解压,当然也可以使用bzip2 -d来替换bunzip2

[roc@roclinux ruanjian]$ bunzip2 mynote.txt.bz2

处理多个文件也挺方便

如果有 A.txt 和 B.txt 两个文件,而我想用一个命令把两个文件分别压缩为 A.txt.bz2 和 A.txt.bz2:

# bzip2 abc1.txt abc2.txt

如果有 A.txt.bz2 和 B.txt.bz2 两个文件,而我想用一个命令把两个文件分别解压为 A.txt 和 B.txt:

[roc@roclinux ~]$ bunzip2 A.txt.bz2 B.txt.bz2

[roc@roclinux ~]$ ls

A.txt B.txt

好了,截至目前,和 bzip2 相关的内容就介绍的差不多了,大家可以自己好好钻研钻研了。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

 类似资料: