Linux 文件与文件系统的打包与压缩
Table of Contents
最近一直在打 dota 啊,偶尔看看《鸟哥的 Linux 私房菜》。每次看到 奋斗 的博客,我总是有些惭愧,感觉我们两个的差距越来越大。 我找不到了以前学习的感觉了,少了那股劲。稍做感叹,进入正题:
在 windows 下压缩很简单,鼠标点一点就 ok 了;而 Linux 下,压缩就没有那么简单了(其实也很简单,几行命令而已)。
其实个人觉得打包是为了压缩服务的(很多人把打包也叫"归档",其实是一回事),因为 Linux 下压缩每次只能对一个文件进行压缩。
它可以对一个目录进行压缩,但是这种压缩是对该目录下的每一个文件进行压缩,不像 windows 下将许多文件压缩成一个 .rar
文件
。因此就有了打包这项技术来配合压缩。
1. 压缩
1.1. gzip
Linux 下使用 gzip 命令实现压缩比较多,目前可以解开 compress、zip 与 gzip 等软件所压缩的文件。 gzip 所新建的文件为 *.gz 的文件名。我们看一下 gzip 的用法吧:
gzip [-cdtv#] 文件名 zcat 文件名.gz
参数:
-c
: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理;-d
: 解压缩的参数;-t
: 可以用来检验一个文件的一致性,看看文件有无错误;-v
: 可以显示出原文件/压缩文件的压缩比等信息;-#
: 压缩等级,-1
最快,但是压缩比最差,-9
最慢,但是压缩比最好。默认是-6
。
举个例子: 将我的博客备份,进行压缩。
比较一下压缩前和压缩后文件大小差距还是比较大的。还会发现一个问题,压缩之后的文件原文件不见了。 这和 WINRAR 很不一样,因此建议先备份后压缩。
zcat 命令读取纯文本被压缩后的压缩文件。
1.2. bzip2
bzip2 比 gzip 有更佳的压缩比,使用上 bzip2 和 gzip 几乎相同。
bzip2 [-cdkzv#] 文件名 bzcat 文件名 bz2
-c
: 将压缩过程中产生的数据输出到屏幕上;-d
: 解压缩的命令;-k
: 保留原文件,而不会删除原始的文件;-z
: 压缩的参数;-v
: 可以显示出原文件/压缩文件的压缩比等信息;-#
: 与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快。
分别使用 gzip 和 bzip2 对同一个文件进行压缩,比对大小。
一个让人很尴尬的局面产生了,gzip 压缩后的文件比 bzip2 压缩的文件更小一些,那么 bzip2 更佳的压缩比从哪里体现呢? 我猜可能是被压缩的文件太小了吧,于是我找了一个大一点的文件继续测试。
果然和我猜想的一样。
2. 打包
Linux 下打包命令是 tar 命令,它可以将多个目录或者文件打包成一个大文件。
tar [-j][-z] [cv] [-f 新建的文件名] filename... <== 打包与压缩 tar [-j|-z] [tv] [-f 新建的文件名] <== 查看文件名 tar [-j|-z] [xv] [-f 新建的文件名] [-C 目录] <== 解压缩
常用参数简介:
-c
: 新建打包文件,可搭配-v
来查看过程中被打包的文件名(filename)。-t
: 查看打包文件的内容含有哪些文件名,重点在查看文件名。-x
: 解打包或者解压缩的功能,可以搭配-C
在特定的目录解开。
特别留意的是, -c
, -t
, -x
不可同时出现在一串命令行中。
-j
: 通过 bzip2 的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2
。-z
: 通过 gzip 的支持进行压缩/解压缩,此时文件名最好为*.tar.gz
。-v
: 在压缩/解压缩的过程中,将正在处理的文件名显示出来。-f filename
: -f 后面要接被处理的文件名。建议-f
单独写成一个参数。-C 目录
: 这个参数在解压缩时,若要在特定目录解压缩,可以使用这个参数。
看似复杂,其实只需记忆常用的几种组合就行了:
- 压缩:
tar -jcv -f filename.tar.bz2
要被压缩的文件或目录名称。 - 查询:
tar -jtv -f filename.tar.bz2
。 - 解压缩:
tar -jxv -f filename.tar.bz2 -C
欲解压缩的目录。
另外,在使用 tar 时,加上 -p
命令,可以保存原文件的文件属性,在做系统备份时常用到。
ok, 简单的文件备份和压缩就是这样了。想要详细学习,请查看《鸟哥的 Linux 私房菜》 第 9 章。