Loading... <p> 前言:你是否曾经因为某个文件占用空间较大,而空间紧缺的U盘无法存放此文件。你是否曾经因为软件里有太多文件而不方便复制和携带。你是否曾因需要备份太过零散而头疼。那么基于“文件压缩和打包”的技术因此出现。下面介绍下Linux下关于压缩、解压缩和打包的工具及使用。</p> <p></p> <hr /> <p></p> <p>一、相关术语的原理和意义</p> <p> 1、压缩原理:</p> <p> 计算机处理信息的是以二进制的形式表示的,而压缩工具就是将二进制数据中的将重复的字符串用特殊字符标记,从而达到了压缩空间的目的目的。</p> <p> 例如:如果你的数据有 111….. 共计 10个1时,那么压缩技术就是只记录了“10个1”,而不是真正的将10个1都记录,这样就能减少空间的占用</p> <p> 2、解压缩</p> <p> 是压缩的反过程,因为压缩过的文件并无法直接被操作系统所使用,因此,如果我们要使用被压缩过的文件数据,那么就需要将压缩文件“还原”成未压缩前的状态,这个就是“解压缩”</p> <p> 3、压缩比</p> <p> 压缩前和压缩后的文件所占用磁盘空间的大小比例</p> <p></p> <hr /> <p></p> <p>二、压缩技术的好处</p> <p> 1、减少文件占用的空间</p> <p> 2、在文件传输过程中不易导致文件损坏</p> <p> 3、可以对压缩文件进行加密,保护文件</p> <p> 4、在应用系统文件备份方便</p> <p></p> <hr /> <p>三、在Linux环境中,压缩文件的扩展名大多是 *.tar , *.tar.gz , *.tgz , *.gz , *.Z , *.bz2 , *.xz ,*.zip</p> <p> 下面是常见的压缩文件扩展名对应的压缩命令</p> <p> *.Z compress程序压缩文件</p> <p> *.gz gzip程序压缩的文件</p> <p> *.bz2 bzip2程序压缩的文件 </p> <p> *.xz xz程序压缩的文件</p> <p> *.tar tar程序打包的文件,但未进行压缩</p> <p> *.tar.gz tar程序打包的文件,并经gzip程序压缩</p> <p> *.tar.bz2 tar程序打包的文件,并经bzip2程序压缩</p> <p> *.zip zip程序压缩的文件</p> <p> 小贴士:在Linux的中,没有一个固定的程序后缀,后缀只是为了管理员标识使用,方便日后的维护。</p> <p></p> <hr /> <p></p> <p>四、下面介绍常用的扩展名对应的压缩命令及使用</p> <p> Linux系统常用的压缩命令</p> <p style="margin-bottom: 5px"> compress :属于比较老旧的一款压缩软件,使用于比较旧UNIX系统上,并现的Linux已不常用</p> <p style="margin-bottom: 5px"> gzip :现应用最广的压缩命令,可解压由compress、zip和gzip等软件所压缩的文件</p> <p> bzip2 :基于Burrows-Wheeler算法变换的无损压缩软件</p> <p> xz :是一款新的压缩文件,采用LZMA SDK压缩</p> <p> zip :是一款比较通用的压缩工具,在Linux,windows都通用</p> <p> 压缩比、压缩速度和解压速率比较</p> <p> compress < gzip < bzip2 < xz</p> <p></p> <p> 1、compress、uncompress</p> <p> 备注:由于compress比较旧,所以CentOS5.5以上默认没有安装,然后compress的程序包是ncompress,如果系统没有此命令,请执行yum install ncompress安装此程序</p> <p> compress [-cv] 文件或目录 <—— 压缩</p> <p> -c:将压缩后的结果输出至标准输出</p> <p> -v: 显示出压缩后的文件信息以及压缩过程中的文件名变化</p> <p> uncompress 文件.Z <—— 解压</p> <pre class="brush:bash;toolbar:false">例子: [root@www tmp]# cp -a /etc/man.config /tmp/ #拷贝/etc/man.config文件到/tmp路径下,为了做练习 [root@www tmp]# compress -v man.config #对man.config文件进行compress压缩 man.config: -- replaced with man.config.Z Compression: 41.84% #压缩比 [root@www tmp]# ls man.config.Z #发现压缩后的文件后缀默认是.Z,这里也可以看出执行了压缩命令后,源文件会被清除 [root@www tmp]# uncompress man.config.Z #解压缩 [root@www tmp]# ls man.config #解压缩后原压缩的文件会被清除 [root@www tmp]# compress -c man.config > man.config.Z #这相当于保留压缩前的文件 [root@www tmp]# ll -h -rw-r--r--. 1 root root 4.9K Feb 22 2013 man.config -rw-r--r--. 1 root root 2.9K Jul 12 13:05 man.config.Z #可以对比压缩后的文件已经被压缩变小</pre> <p> 小贴士:compress现在已经很少使用了,因为它无法解压*.gz,*.bz2等压缩文件,而后续的压缩程序能解压*.Z的程序包</p> <p></p> <p> 2、gzip、gunzip、zcat</p> <p> gzip [-cdtv#] 文件名 <—— 压缩</p> <p> -c:将压缩后的结果输出至标准输出,这样就能保留源文件了</p> <p> -d:相当于gunzip</p> <p> -t:可以校验压缩文件的一致性、看看文件有无错误</p> <p> -v:显示压缩比的信息</p> <p> -#:指定压缩比,范围0-9,数字越大,压缩比例越大,但所消耗的CPU资源更多。默认为6</p> <p> gunzip 文件名.gz <—— 解压缩</p> <p> zcat 文件名.gz <—— 不解压查看gzip压缩后的文件内容</p> <pre class="brush:bash;toolbar:false">例子: [root@www tmp]# gzip -v man.config #压缩文件 man.config: 56.5% -- replaced with man.config.gz #显示压缩比 [root@www tmp]# ls man.config.gz #压缩后原文件会被删除 [root@www tmp]# gzip -c man.config > man.config.gz #这相当于保留压缩前的文件 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2184 Jul 12 13:27 man.config.gz [root@www tmp]# zcat man.config.gz #不解压查看gzip压缩的文件的内容 [root@www tmp]# gzip -1 -c man.config > man.config1.gz [root@www tmp]# gzip -9 -c man.config > man.config9.gz #压缩比例越高,所占空间越小 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2332 Jul 12 13:31 man.config1.gz -rw-r--r--. 1 root root 2184 Jul 12 13:31 man.config9.gz [root@www tmp]# gzip -d man.config1.gz #解压缩文件,相当于gunzip [root@www tmp]# ls man.config man.config1 man.config9.gz</pre> <p> 小贴士:gzip不能压缩目录</p> <p></p> <p> 3、bzip2、bunzip2、bzcat</p> <p> bzip2 [-cdkv#] 文件名 <——压缩</p> <p> -c:将压缩后的结果输出至标准输出,这样就能保留源文件了</p> <p> -d:相当于gunzip</p> <p> -t:可以校验压缩文件的一致性、看看文件有无错误</p> <p> -v:显示压缩比等的信息</p> <p> -k:保留原文件,而不会删除原始文件</p> <p> -#:指定压缩比,范围0-9,数字越大,压缩比例越大,但所消耗的CPU资源更多。默认为6</p> <p> bunzip2 文件名.bz2 <——解压缩</p> <p> bzcat 文件名.bze <——不解压查看bzip2压缩后的文件内容</p> <pre class="brush:bash;toolbar:false">例子: [root@www tmp]# bzip2 -v man.config man.config: 2.251:1, 3.555 bits/byte, 55.57% saved, 4940 in, 2195 out. #压缩比,速度等信息 [root@www tmp]# ls man.config.bz2 [root@www tmp]# bzip2 -d man.config.bz2 #解压缩,相当于bunzip [root@www tmp]# ls man.config [root@www tmp]# bzip2 -9 -k man.config #-k参数压缩后保留了原始文件 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2195 Jul 12 13:23 man.config.bz2 [root@www tmp]# bzcat man.config.bz2 #不解压查看bzip2压缩后的文件内容 [root@www tmp]# bzip2 -c man.config > man.config2.bz2 [root@www tmp]# ls man.config man.config2.bz2 man.config.bz2</pre> <p> 小贴士:bzip2不能压缩目录</p> <p></p> <p> 4、xz、unxz、xzcat</p> <p> xz [-cdkv# ] 文件名 <——压缩</p> <p> 各参数用法和bzip2一样,这里不再详述</p> <p> unxz 文件名.xz <——解压缩</p> <p> xzcat 文件名 <——不解压查看xz压缩后的文件内容</p> <pre class="brush:bash;toolbar:false">练习: [root@www tmp]# xz -v man.config man.config (1/1) 100.0 % 2,204 B / 4,940 B = 0.446 #压缩比信息 [root@www tmp]# xz -c man.config > man.config.xz #这相当于保留压缩前的文件 [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config -rw-r--r--. 1 root root 2204 Jul 12 14:18 man.config.xz [root@www tmp]# unxz man.config.xz #解压缩,相当于xz -d [root@www tmp]# ll -rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config</pre> <p></p> <p> 5、zip、unzip</p> <p> zip ZIPFILE.zip src_file…. <——压缩</p> <p> 备注:zip可以对目录进行归档压缩</p> <p> unzip ZIPFILE.zip <——解压缩</p> <pre class="brush:bash;toolbar:false">练习: [root@www tmp]# cp -R /home/* /tmp/home/ #将home下文件拷贝到/tmp目录下 [root@www tmp]# ls /home/ user1 user2 [root@www tmp]# zip home.zip home/* #对目录进行压缩 adding: home/user1/ (stored 0%) adding: home/user2/ (stored 0%) [root@www tmp]# ls home home.zip</pre> <p> 对于目录的归档压缩通常使用tar工具,所以zip这里不再多介绍</p> <p></p> <hr /> <p></p> <p>五、打包归档工具</p> <p> tar:打包归档工具</p> <p> 能实现将多个文件打包成单个文件,即为归档文件,但是tar只是归档,不压缩</p> <p> 1、创建归档</p> <p> tar [-cvf] Tarfile.tar filename </p> <p> -c:create,新建打包文件</p> <p> -v:在压缩/解压缩过程中,将正在处理的文件名显示出来</p> <p> -f filename:-f后面一定要接被处理的文件名,建议-f 单独使用一个参数</p> <pre class="brush:bash;toolbar:false">[root@www tmp]# tar -cv -f /tmp/home.tar /home [root@www tmp]# ls /tmp/ home.tar</pre> <p> 2、展开归档</p> <p> tar [-xvf] Tarfile.tar</p> <p> -x:解压缩的功能</p> <p> -v:在压缩/解压缩过程中,将正在处理的文件名显示出来</p> <p> -f filename:-f后面一定要接被处理的文件名,建议-f 单独使用一个参数 </p> <pre class="brush:bash;toolbar:false">[root@www tmp]# tar -xvf home.tar [root@www tmp]# ls home home.tar</pre> <p> 3、 查看归档后的文件中包含了哪些原文件</p> <p> tar [-tf] Tarfile.tar</p> <p> -t:查看打包文件里包含哪些文件名</p> <p> -f filename:-f后面一定要接被处理的文件名,建议-f 单独使用一个参数</p> <pre class="brush:bash;toolbar:false">[root@www tmp]# tar -tf home.tar</pre> <p> 4、tar与压缩工具(gzip、bzip2、xz)来执行压缩</p> <p> tar [-zjJ] Tarfile.tar</p> <p> -z:使用gzip进行压缩/解压缩,此文件名最好为*.tar.gz</p> <p> -j:使用bzip2进行压缩/解压缩,此文件名最好为*.tar.bz2</p> <p> -J:使用xz进行压缩/解压缩,此文件名最好为*.tar.xz</p> <pre class="brush:bash;toolbar:false">[root@www tmp]# tar -zcvf home.tar.gz home [root@www tmp]# ls home home.tar home.tar.gz</pre> <p></p> <hr /> <p>六、命令总结</p> <p> 1、Linux系统常用的压缩命令 : compress,gzip,bzip2,xz,zip</p> <p> 其中compress,gzip,bzip2,xz不能对目录进行压缩归档,一般和tar归档打包工具一起使用,从而达到对目录进行归档 </p> <p> zip可以直接对目录进行压缩归档</p> <p> 2、打包归档工具:tar</p> <p> 创建归档参数: [-cvf]</p> <p> 展开归档参数: [-xvf]</p> <p> 查看归档后的文件参数:[-tf]]</p> <p> tar和压缩工具一起使用参数:[-zjJ]</p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信