1 打包(归档)和压缩(包含二者的区别)

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。

通常,归档会和系统(数据)备份联系在一起,不过,有关数据备份的内容,之后进行说明。

和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其占用的磁盘空间比集合中所有文集大小的总和要小。
压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了“Linux系统”,那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。
由于计算机处理的信息是以二进制的形式表示的,因此,压缩文文件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或多个文件用压缩软件进行压缩,形成一个压缩文件包,既可以节省存储空间,又可以方便在网络传送。
如果能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很有可能损坏文件的内容,因此。压缩又分为有损压缩无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误;有损压缩指的是即使丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式mpeg、音乐文件格式mp3以及图像文件格式jpg。
采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常只有原文件的一半甚至更小。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称为解压缩 Linux下,常用归档命令有2个,分别是tardd(相对而言,tar的使用更为广泛);常用的压缩命令有很多,比如gzipzipbzip2等。

注意,tar命令也可以作为压缩命令,也很常用。

2 Linux tar命令

在Linux系统中,最常用的归档(打包)命令就是tar,该命令可以使许多文件一起保存到一个单独的磁带或磁盘中进行归档。不仅如此,该命令还可以从归档文件中还原所需文件,也就是打包的反过程,称为解打包。

使用tar命令归档的包通常称为tar包(tar包文件都是以“.tar”结尾的)。

2.1 tar命令执行打包操作

tar命令的基本格式为:

[chen@localhost~]$ tar [选项] 源文件或目录

选项

作用

-c

将多个文件或目录进行打包

-A

追加tar文件到归档文件

-f 包名

指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要使用正确的扩展名

-v

显示打包文件过程

【例1】打包多个文件
/home/chen/my/ 目录下的文件target1,target2,target3打包 并命名为bao.tar且放到/home/chen/my/ 目录下

[chen@localhost my] tar -cvf bao.tar target1 target2 target3

yarn 打包提升效率_yarn 打包提升效率


【例2】打包目录

/home/chen/my/目录打包并命名bao.tar且放在/home/chen/My/目录下

[~]$ tar -cvf /home/chen/My/bao.tar /home/chen/my/

yarn 打包提升效率_压缩包_02


【例3】打包并压缩目录

在例2的基础上将/home/chen/My/bao.tar文件压缩。

压缩命令不能直接压缩目录,必须先使用tar命令将目录打包,才能使用gzip命令bzip2命令对打包文件进行压缩

[~]$ tar -cvf /home/chen/My/bao.tar /home/chen/my/
[~]$ gzip /home/chen/My/bap.tar

yarn 打包提升效率_压缩文件_03

2.2 tar命令执行解打包操作

tar命令的基本格式如下:

[chen@localhost~]$ tar [选项] tar包

选项

作用

-x

对tar包做解打包操作

-t

只查看tar包中有哪些文件或目录

-f

指定要解压的tar包的包名(这是最后一个参数)

-C 目录

指定解打包位置

-v

显示解打包的具体过程

【例1】解打包/home/chen/my/bao.tar文件到当前目录/home/chen/my/下。

[~]$ tar -xvf /home/chen/my/bao.tar

yarn 打包提升效率_压缩文件_04


【例2】解打包/home/chen/my/bao.tar文件到其它目录/home/chen/My/下。

[~]$ tar -xvf /home/chen/my/bao.tar -C /home/chen/My/

yarn 打包提升效率_yarn 打包提升效率_05


【例3】 查看/home/chen/my/bao.tar文件的内容

[~]$ tar -tvf /home/chen/my/bao.tar

yarn 打包提升效率_yarn 打包提升效率_06

2.3 tar命令执行 打包压缩(解包解压)操作

你可能会觉得Linux实在太不智能了,一个打包压缩,居然还要先打包成.tyar格式,再压缩成.tar.gz.tar.bz2格式。其实,tar命令是可以同时打包压缩的,前面的讲解之所以打包和压缩分开,是为了让大家了解在Linux中打包和压缩的不同。
tar命令的基本格式如下:

[chen@localhost~]$ tar [选项] 压缩包 源文件或目录

选项 作用

-z

压缩和解压缩.tar.gz格式

-j

压缩和解压缩.tar.bz2格式

【例1】压缩与解压缩 .tar.gz格式
/home/chen/my/target1文件压缩为bao.tar.gz并放入/home/chen/目录下

[~]$ tar -zcvf /home/chen/bao.tar.gz /home/chen/my/target1

yarn 打包提升效率_解压缩_07

2.4 两种常见问题

【问题1】

tar命令打包压缩时报错:tar:Removing leading ‘/’ from member names

yarn 打包提升效率_yarn 打包提升效率_08


问题原因:因为使用的是绝对路径/home/chen/my/*.txt,而不是相对路径。而tar命令默认是采用相对路径进行压缩打包的

一般不推荐使用绝对路径,原因之一是可能会导致tar炸弹

解决方案:打包压缩时使用相对路径./my/*.txt

yarn 打包提升效率_linux_09


【问题2】

解压时发现连同路径都一起打包进去

解决方案:最好在打包时,进入要打包的文件目录,减少目录层级。(要打印/home/chen/my/*.txt文件,最好是先进入到/home/chen/my目录)

yarn 打包提升效率_yarn 打包提升效率_10

3 Linux zip/unzip 命令

zip命令的基本格式如下:

[chen@localhost ~]$ zip [选项] 压缩包名 源文件名

unzip命令的基本格式如下:

[chen@loaclhost ~]$ unzip [选项] 压缩包名

选项

作用

-r

递归压缩目录,及目录下内容全部压缩

-m

将文件压缩后删除原始文件

-v

显示详细的压缩过程信息

-d 目录名

将压缩文件解压到指定目录下

【例1】压缩/home/chen/my/*.txt文件到/home/chen/My1/目录下,并取名为bao.zip 解压缩/home/chen/My1/bao.zip文件到/home/chen/My2/目录下

[chen@localhost ~]$ cd my # 进入到压缩文件的上层目录中
[chen@localhost my]$ zip /home/chen/My1/bao.zip *.txt
[chen@localhost my]$ cd ../My1
[chen@localhost My1]$ unzip -d /home/chen/My2 bao.zip

【例2】压缩/home/chen/my/目录到/home/chen/My1/目录下,并取名为bao1.zip 解压缩/home/chen/My1/bao1.zip文件到/home/chen/My2/目录下

[chen@localhost ~]$ zip -r /home/chen/My1/bao1.zip my
[chen@localhost ~] cd My1
[chen@localhost My1]$ unzip -d /home/chen/My2 bao1.zip