Linux 文件与文件系统的打包与压缩

Table of Contents

最近一直在打 dota 啊,偶尔看看《鸟哥的 Linux 私房菜》。每次看到 奋斗 的博客,我总是有些惭愧,感觉我们两个的差距越来越大。我找不到了以前学习的感觉了,少了那股劲。稍做感叹,进入正题: 在 windows 下压缩很简单,鼠标点一点就 ok 了;而 Linux 下,压缩就没有那么简单了(其实也很简单,几行命令而已)。

其实个人觉得打包是为了压缩服务的(很多人把打包也叫"归档",其实是一回事),因为 Linux 下压缩每次只能对一个文件进行压缩。它可以对一个目录进行压缩,但是这种压缩是对该目录下的每一个文件进行压缩,不像 windows 下将许多文件压缩成一个 .rar 文件。因此就有了打包这项技术来配合压缩。

1 1.压缩

1.1 1.1 gzip

Linux 下使用 gzip 命令实现压缩比较多,目前可以解开 compress、zip 与 gzip 等软件所压缩的文件。gzip 所新建的文件为 *.gz 的文件名。我们看一下 gzip 的用法吧:

gzip [-cdtv#] 文件名
zcat 文件名.gz

参数:

  • -c : 将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
  • -d : 解压缩的参数;
  • -t : 可以用来检验一个文件的一致性,看看文件有无错误;
  • -v : 可以显示出原文件/压缩文件的压缩比等信息;
  • -# : 压缩等级,-1 最快,但是压缩比最差,-9 最慢,但是压缩比最好。默认是 -6 。

举个例子: 将我的博客备份,进行压缩。

1.png

比较一下压缩前和压缩后文件大小差距还是比较大的。还会发现一个问题,压缩之后的文件原文件不见了。这和 WINRAR 很不一样,因此建议先备份后压缩。

zcat 命令读取纯文本被压缩后的压缩文件。

1.2 1.2 bzip2

bzip2 比 gzip 有更佳的压缩比,使用上 bzip2 和 gzip 几乎相同。

bzip2 [-cdkzv#] 文件名
bzcat 文件名 bz2
  • -c : 将压缩过程中产生的数据输出到屏幕上;
  • -d : 解压缩的命令;
  • -k : 保留原文件,而不会删除原始的文件;
  • -z : 压缩的参数;
  • -v : 可以显示出原文件/压缩文件的压缩比等信息;
  • -# : 与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快。

分别使用 gzip 和 bzip2 对同一个文件进行压缩,比对大小。

2.png

一个让人很尴尬的局面产生了,gzip 压缩后的文件比 bzip2 压缩的文件更小一些,那么 bzip2 更佳的压缩比从哪里体现呢? 我猜可能是被压缩的文件太小了吧,于是我找了一个大一点的文件继续测试。

2.png

果然和我猜想的一样。

2 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 章。

Date: 2012-02-10 13:49:25

Author: JerryZhang