Linux知识点整理(四)——文件与文件系统的压缩,打包

一、什么压缩,什么是打包?

1)压缩

『文件压缩』呢?我们来稍微谈一谈他的原理好了。目前我们使用的电脑系统中都是使用所谓的 bytes 单位来计量的!不过,事实上,电脑最小的计量单位应该是 bits 才对啊。此外,我们也知道 1 byte = 8 bits 。但是如果今天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个 byte 可以看成底下的模样:

□□□□□□□□
由于我们记录数字是 1 ,考虑电脑所谓的二进位, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 ,其实在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的访问,所以就会将该数据转为 byte 的型态来记录了!通过利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小!

另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『111…』共有100个1时, 那么压缩技术会记录为『100个1』而不是真的有100个1的比特存在!这样也能够精简文件记录的容量呢!

2) 打包(tar)

这个 tar 可以将很多文件『打包』成为一个文件!目录也可。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多文件集结成为一个文件, 事实上,他并没有提供压缩的功能,后来,GNU 计划中,将整个 tar 与压缩的功能结合在一起,如此一来提供用户更方便并且更强大的压缩与打包功能!

二、压缩与解压缩命名

1)gzip, zcat/zmore/zless/zgrep

$ gzip [-cdtv#] 文件名


注意:使用 gzip 进行压缩时,在缺省的状态下原本的文件会被压缩成为 .gz 的文件名,源文件案就不再存在了
选项与参数:
-c  :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d  :解压缩的参数;
-t  :可以用来检验一个压缩档的一致性~看看文件有无错误;
-v  :可以显示出原文件/压缩文件的压缩比等信息;
-#  :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!缺省是 -6
$ zcat/zmore/zless 文件名.gz

# 查看压缩文件的内容

注意:解压缩使用的命令为:

$ gzip -d 文件名.gz
$ zgrep -n 'http' services.gz
# 找出 'http'在这个关键字在services.gz哪几行?

2)bzip2, bzcat/bzmore/bzless/bzgrep(压缩比比gzip好)

$ bzip2 [-cdkzv#] 文件名
选项与参数:
-c  :将压缩的过程产生的数据输出到屏幕上!
-d  :解压缩的参数
-k  :保留源文件案,而不会删除原始的文件喔!
-z  :压缩的参数 (默认值,可以不加)
-v  :可以显示出原文件/压缩文件的压缩比等信息;
-#  :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
$ bzcat/bzmore/bzless 文件名.bz2

注意:解压缩使用的命令为:

 bzip2 -d services.bz2

可以发现到 bzip2 的压缩率确实比 gzip 要好些!不过,对于大容量文件来说,bzip2 压缩时间会花比较久喔!至少比 gzip 要久的多。

3) xz, xzcat/xzmore/xzless/xzgrep(缩比更高的软件)

$ xz [-dtlkc#] 文件名
选项与参数:
-d  :就是解压缩啊!
-t  :测试压缩档的完整性,看有没有错误
-l  :列出压缩档的相关信息
-k  :保留原本的文件不删除~
-c  :同样的,就是将数据由屏幕上输出的意思!
-#  :同样的,也有较佳的压缩比的意思!
$ xcat/xzmore/xzless/ 文件名.xz

注意:解压缩使用的命令为:

$ xz -d services.xz

三、 打包指令: tar

tar 可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2/xz 的支持,将该文件同时进行压缩。

$ tar [-z|-j|-J] [cv] [-f 待创建的新文件名] filename... <==打包与压缩
$ tar [-z|-j|-J] [tv] [-f 既有的 tar文件名]             <==察看文件名
$ tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录]   <==解压缩
选项与参数:
-c  :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
-t  :察看打包文件的内容含有哪些文件名,重点在察看『文件名』就是了;
-x  :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
      特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-z  :透过 gzip  的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
-j  :透过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
-J  :透过 xz    的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz
      特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v  :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的文件名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录    :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的设置档
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包! 

最简单的tar使用:

压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查 询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

解压压缩文件中特定文件(grep)

$ tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'

打包某目录,但不含该目录下的某些文件之作法(exclude)
假设我们想要打包 /etc/ /root 这几个重要的目录,但却不想要打包 /root/etc* 开头的文件, 而且假设这个新的打包文件要放置成为 /root/system.tar.bz2 ,当然这个文件自己不要打包自己 (因为这个文件放置在 /root 底下啊!)

$ tar -jcv  -f /root/system.tar.bz2 --exclude=/root/etc* \
 --exclude=/root/system.tar.bz2  /etc /root

参考资料:
【1】鸟哥的Linux私房菜——文件与文件系统的压缩,打包与备份

猜你喜欢

转载自blog.csdn.net/weixin_43763859/article/details/106801826