12 shell命令之打包

昨晚写的awk,说实话,对我而言,那是一个最复杂的命令.写得不是很好,可能在结构组织上面有很大的问题.后续有心得会再调整修改.

本文将介绍linux的一组打包命令.这其中有我们最常用的tar,也有我们几乎没有见过的mksquansh.接下来就随我一起了解一下吧.

1. gzip 和 gunzip

gzip是linux平台最常用的压缩格式,不过其职能对单个文件进行压缩,所以我们采用的方式是先用tar将多个文件处理成一个文件,然后在用gzip对其进行压缩,这也是为什么其压缩后的后缀名是tar.gz.下面看看gzip的用法.

gzip对应的是tar命令的z选项.如果我们不用tar命令的z选项.就需要像如下的方式使用.

tar cvf filename.tar  [filelist] (我们把这个过程称为归档)

gzip filename.tar  (这个过程称为压缩)

这样就可以生成一个后缀名为tar.gz的文件.只是我们一直使用tar命令,以为归档和压缩是回事,但是可以看到.其实并不是一回事.

gzip的几个常用的选项如下:

-l   列出压缩文件的属性信息,当然,得是gz后缀的文件.

-c   将压缩后的内容输出到stdout.

我们可以指定压缩率:1 - 9 .gzip的压缩率从1-9递增.1表示压缩率最小,但是压缩速度最快.9表示压缩率最大,但是速度最慢.

技术分享

从上面我们可以看到,就是我漏掉了一点,gzip压缩会删除掉源文件,gunzip解压缩会删除掉压缩文件.

另外还有一个命令zcat.可以不用压缩查看gzip压缩格式的文件.


2. bzip2 和bunzip2

再来看看bzip.和gzip几乎是一个模子的.区别仅仅在于使用的压缩技术.对应到tar就是j.

同样需要注意,bzip2也是一对一的,不能指定多个文件,另外bzip2也是会删除源文件.这两点和gzip没有区别.

bzip2也有-c选项,效果和gzip还是一样的.

另外同样可以指定1 - 9 级的压缩率,这一点和gzip又是一样的.

类似的,我们可以使用bzcat命令不用解压缩就查看bz2的压缩包内容.

遗憾的是,我没有找到类似gzip -l这样的选项.ok.不做演示了.模仿gzip,我们可以熟练的使用bzip2


3. lzma 和 unlzma

一个较新的压缩工具,对应tar命令的选项--lzma.不多说了.和bzip2几乎完全一样.

可以使用-k来避免删除掉源文件,每一次职能压缩一个文件,需要结合tar归档来达到压缩多个文件的目的.压缩后会删除源文件

可以指定1 - 9 的压缩率.同样通过-c将压缩结果输出到stdout.

另外同样提供lzcat命令,不解压缩就可以查看压缩包内容.

其压缩后的后缀名是lzma.

貌似这三个命令是杠上了.


4. tar

如果说上面三个命令各自为政,那么tar命令,如同秦始皇统一六国一样,将上面的三个命令融合在了一起.并且提供了更为方便快捷的操作.

-a   自动识别压缩类别.用于解压缩的场景

-j   bz2后缀,用来对文件进行bz2方式的压缩或者解压缩

-z   gzip的方式压缩和解压缩.后缀gz

--lzma   lzma后缀,用来对文件进行lzma的压缩和解压缩

-c   创建一个归档文件

-x   解开一个归档文件

-f   无论是解压缩还是压缩,无论是归档还是解档.其后始终跟的是归档文件.

-v   在归档过程中显示详细信息.

-t   不解压缩查看压缩包里面的文件列表.注意是文件列表.不像上面三个命令提供的**cat一样,前者是查看文件列表,后者查看的是文件内容.

-C   指定一个解压缩的文件夹.注意这个文件夹必须是存在的.

tar的应用可以说是最广泛的.掌握这些常用的它的用法就显得尤为必要


5. cpio

另一款多文件归档的命令是cpio,它将指定的多个文件和文件夹归档到一个文件,并且保存源文件的所有属性.

它从stdin接收输入,然后把结果输出到stdout.所以我们需要重定向.

-o   指定命令作为归档使用.

-v   在归档过程中打印归档文件列表,复用了stderr作为文件列表打印的描述符.

-i   指定此命令作为解档使用.

-t   列出归档文件中的文件列表.

-d   解档

技术分享


5. squanshfs

这肯定是最屌的一个压缩命令.你完全可以好不掩饰的发出吃惊的声音,因为它实在太给力了.当然它并没有对应的解压缩.它利用的是环回的方式来达到查看其内容的目的.

mksquashfs source dst.squashfs

这就是它的用法.它还可以指定选项.

-e 放在source后面,用来指定在source中需要排除的内容.

正如所有的资料所说,既然squashfs是应对高压缩的,所以当我们需要归档1k的文件是,还是省省力气吧.我们需要直接面对squash压缩大文件的场景.

技术分享

压缩完成.我们来做一个直观的对比.

技术分享

从原来的1.6G的文件,到显现的759M.压缩率达到了%50以上.再来看一下里面的内容.

前面我的文章介绍过.我们有两种方式去查看一个环回文件.

第一种是直接mount.

mount -o loop zzworkspace.squanshfs /mnt/loop

技术分享

第二种方式是首先建立一个环回设备,然后挂载这个环回设备.

losetup /dev/loop1 zzworkspace.squanshfs

mount -o /dev/loop1 /mnt/loop

技术分享


ok. 关于linux的压缩命令就介绍这些.这个过程真是一个不错的复习,在整理的过程中,有很多地方已经忘记了.回头又翻看了一下书籍.加深了一下印象.

希望以上的内容能够对同学们有所帮助.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。