Linux之文件压缩与打包详解,linux打包详解


在讲解压缩与打包之前说一下什么是压缩,简单的说,就是经过压缩软件压缩的文件叫压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,可以把它变成6个0 的写法60,来减少该文件的空间,计算机中都是以byte为单位的,其实bit才是计算的最小单位,比如对于一个8位的 0000 00001正好是一个byte,但是发现前7位都是0,因此可以“记录”1,这样就省下了 7 bits,实现文件变小的功能。

Linux 系统常见的压缩命令有以下几个,这里之所以有扩名,完全是为了我们解读文件的直观性,看到就知道是什么格式的压缩文件,最主要的是不同的压缩格式解压缩的方式不同,所以通过后缀名,可以使用正确的解压缩方式进行解压缩

1、gzip , zcap

gzip是应用最为广泛的压缩命令,gzip 可以解压zip 和 gzip等软件的压缩文件

[root @localhost ~]#gzip [-cdtv#]  filename
[root @localhost ~]#zcap filename.gz

参数解析:
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d:解压缩参数
-t: 用来检查一个压缩文件的一致性,查看文件有无错误
-v: 显示源文件和压缩文件的压缩比例
-#:压缩等级,-1,压缩速度最快,压缩比最差,-9最慢,压缩比最好,默认是-6

注意:使用gzip进行压缩时,默认下文件被压缩成.gz的形式,源文件会被删除

\

知道普通文件的查看可以是 cat 命令,同样,压缩文件可以使用 zcat 进行查看 压缩文件的内容

\

现在将上述压缩文件解压缩

[root@localhost tmp]# gzip -d man.config.gz

\

注意:gzip -d 解压缩后,默认的将.gz的压缩文件删除,生成源文件

利用重定向保留源文件和压缩文件

[root@localhost tmp]# gzip -c man.config > man.config.gz

\

2、bzip2,bzcat

bzip2压缩方式是为了取代gzip并提供最佳的压缩比而产生的,其用法同gzip完全一样,只是为了更好的压缩比,同时为了查看压缩文件的内容,使用bzcat进行查看,压缩文件的后缀是 .bz

[root @localhost ~]#bzip2 [-cdtv#]  filename
[root @localhost ~]#bzcap filename.bz2

参数解析:
-c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d:解压缩参数
-t: 用来检查一个压缩文件的一致性,查看文件有无错误
-v: 显示源文件和压缩文件的压缩比例
-#:压缩等级,-1,压缩速度最快,压缩比最差,-9最慢,压缩比最好,默认是-6

3、打包 tar

什么是打包?就是将多个文件或者目录包成一个文件的功能。

[root @localhost ~]#tar [-j|-z] [cv] [-f新建的文件名] filename1,filenam2....  #打包与压缩
[root @localhost ~]#tar [-j|-z] [-tv] [-f 新建的文件名]                       #查看文件名
[root @localhost ~]#tar [-j|-z] [xv] [-f新建的文件名] [-C 目录]               #解压缩参数

参数解析:
-c:	新建打包文件,可搭配 -v来查看过程中被打包的文件名 filename1...
-t:	查看打包文件的内容含有哪些文件名,重点在查看文件名
-x: 解打包或者解压缩,搭配 -C 在特定目录解开,特别注意:-c,-t,-x不可同时出现在一串命令行中
-j: 通过bzip2的支持进行压缩/解压缩,此时文件名的后缀建议为.tar.bz2
-z: 通过gzip的支持进行压缩/解压缩,此时文件名的后缀建议为.tar.gz
-v: 在压缩/解压缩的过程中,将正在处理的文件名显示处理
-f filename: -f后面跟要被处理的文件,建议 -f 单独写成一个参数
-C 目录: 这个参数在解压缩时,若要在特定目录解压缩,可以使用这个参数

另外还有两个参数:

-p: 保留备份数据的基本权限与属性,常用与备份(-c)重要的配置文件

-P:保留绝对路径,即允许备份数据中含有根目录存在之意

注意:之所以要将 -f filename单独写,如果 -jcvf filename也可以,但由于参数的顺序是可以变更,这样与 -jvfc filename 仅 仅是变更了参数顺序,但是这样是不行,因为 -f filename ,这样导致生成了文件名为 c 的文件,因此建议-f单独列出来

常见的使用tar如下几条命令:

[root @localhost ~]#tar -jcv -f filename.tar.bz2 要被压缩的文件和目录    #压缩命令
[root @localhost ~]#tar -jtv -f filename.tar.bz2                         #查询
[root @localhost ~]#tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录       #解压缩

将/etc目录下的文件打包并压缩为etc.tar.gz的压缩文件

[root @localhost ~]#tar -zpcv -f /root/etc.tar.gz /etc

由于指定了 -v 参数,因此会将打包压缩过程中的文件名显示在屏幕上,对于 -p 参数,是为了保留源文件的权限和属性

\

图中,显示了部分打包压缩过程中的文件名。解压缩

[root @localhost ~]#tar -jpcv -f /root/etc.tar.gz /etc
[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2                 #将 tar 文件解压缩

注意:文件的备份和复制过程中,文件的权限可能会发生变更,因此在备份重要的系统数据时,源文件的权限必须进行完整的备份

查看 tar 文件的数据内容

[root @localhost ~]#tar -jtv -f /root/etc.tar.bi2

这里给出整个过程:

[root @localhost ~]#tar -jpcv -f /root/etc.tar.bz2 /etc           #将  /etc  目录压缩为etc.bta.bz2 的压缩文件
[root @localhost ~]#tar -jtv -f /root/etc.tar.bz2                 #查看 tar 文件的数据内容

\查看压缩文件的内容时,使用 参数 -v 会将文件权限/属性显示出来

[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2                 #将 tar 文件解压缩

此时会看到解压缩后的文件 /etc 会在本目录下生成

\

通常需要指定解压缩的位置,将解压缩后的文件放在 /tmp 目录下

[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2  -C /tmp               #指定 tar 文件解压缩的位置为 /tmp

\

a.那如果只是想解压压缩文件中的某一个文件呢?

使用 -jtv 找到你要的文件名

[root @localhost ~]#tar -jtv -f /root/etc.tar.bz2   | grep 'shadow'              #找到需要解压的文件
[root @localhost ~]#tar -jxv -f /root/etc.tar.bz2  /etc/shadow                   #解压压缩文件中的一个文件

其中方法是,先通过 -jtv 找到需要解压的文件,然后使用 -jxv 进行解压

[root @localhost ~]#tar -jxv -f 打包文件.tar.bz2 待解压的文件名

b.打包某个目录,但是不包含该目录下的某些文件

相关内容