当前位置: 代码迷 >> Linux/Unix >> Linux文件与文件系统的压缩与封装
  详细解决方案

Linux文件与文件系统的压缩与封装

热度:610   发布时间:2016-04-29 12:25:21.0
Linux文件与文件系统的压缩与打包

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

进来在学习Linux了,不过Linux的命令太多了,怕记不住所以使用博客记录的方式来写下自己的学习过程,以后忘记了还可以翻阅自己写下的博客来查查:

  • Linux系统常见的压缩命令
  • Compress
  • gzip,gcat
  • bzip2,bzcat
  • 打包命令:tar

Linux系统常见的压缩命令

Linux的环境下,压缩文件大多扩展名是*.tar, *.tar,*.gz, *.tgz, *.gz, *.Z, *.bz2,下面我们列出常见的压缩文件扩展名:
*.Z—————>compress程序压缩文件
*.gz—————>gzip程序压缩的文件
*.bz2————–>bzip2程序压缩的文件
*.tar—————>tar程序打包的数据,并没有进行压缩
*.tar.gz————>tar程序打包的文件,并且经过gzip进行压缩处理。
*.tar.bz2———–>tar程序打包的文件,并且经过bzip2进行压缩处理。

Linux系统常见的压缩命令就是gzip与bzip2,至于compress已经不再流行了。gzip是由GNU计划所开发出来的压缩命令,该命令已经替换了compress。后来GNU有开发出bzip2这个压缩比更好的压缩命令。不过这些命令通常只能针对一个文件来压缩与解压缩,如此一来,每次压缩都要一大堆文件,岂不是很烦人?此时打包软件tar就很重要了。

Compress

compress已经非常老旧了,不过学习练练手还是可以的。现在的Linux distribution似乎已经没有默认安装了,所以练手时可以安装ncompress这个软件。

安装ncompress

我这里提示我已经安装好了,所以基本上没有做什么处理,如果第一次安装的话可能需要你输入y,之后继续安装。
接下来看看如何使用compress命令。

[[email protected] ~]#compress [-rcv] 文件或目录   <==这里指压缩[[email protected] ~]#uncompress 文件名.Z          <==这里指解压缩选项与参数:-r : 可以连同目录下的文件也同时给予压缩。-c : 将压缩数据输出成为standard output(输出到屏幕)-v : 可以显示压缩后的文件信息以及压缩过程中的文件信息

compress压缩文件

compress压缩文件

compress解压缩文件

compress解压缩文件

解压缩之后会发现man_db.conf.Z文件没有,如果你想要保存该文件可以使用-c的语法。

gzip,zcat

gzip是使用最广的压缩命令了。目前gzip可以解压compress、zip与gzip等压缩软件所压缩的文件。接下来看下语法:

[[email protected] ~]#gzip [-cdtv#] 文件名[[email protected] ~]#zcat 文件名.gz参数:-c : 将压缩的数据输出到屏幕上,可通过数据流重定向来处理;-d : 解压缩需要用到的参数;-t : 可用来校验一个压缩文件的一致性,看看文件是否有错误;-v : 显示原文件/压缩文件的压缩比等信息;-# : 压缩等级,-1最快,但其压缩比较差,-9最慢,但压缩比最好,默认-6.

gzip压缩文件

gzip压缩文件

zcat读取压缩文件内容

zcat读取压缩文件内容

gzip解压缩文件

gzip解压缩文件

bzip2,bzcat

gzip是为了替代compress而成立的,而bzip2则是为了取代gzip并提供更佳的压缩比而来的,下面来说下具体的用法:

[[email protected] ~]#bzip2[-cdkzv#] 文件名[[email protected] ~]#bzcat 文件名.bz2参数:-c : 将压缩的数据输出到屏幕上;-d : 解压缩需要用到的参数;-k : 保留原文件,而不会删除原始的文件;-z : 压缩的参数;-v : 显示原文件/压缩文件的压缩比等信息;-# : 压缩等级,-1最快,但其压缩比较差,-9最慢,但压缩比最好.

bzip2压缩与bzcat显示压缩文件内容

这里写图片描述

打包命令:tar

虽然gzip与bzip2也能针对目录来进行压缩,不过这两个目录的压缩指的是将目录内的所有文件“分别”进行压缩的操作。
这种将多个文件或目录包成一个大文件的命令功能,我们可以称呼它是一种“打包命令”。Linux下面就是鼎鼎大名的tar。tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将该文件同时进行压缩。
tar的参数非常多,我们只讲几个常用的参数,更多参数可以自行man tar查询。

[[email protected] ~]#tar [-j|-z] [cv] [-f 新建的文件名] filename... <==打包与压缩[[email protected] ~]#tar [-j|-z][tv] [-f 新建的文件名]              <==查看文件名[[email protected] ~]#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 目录 : 这个参数用在解压缩时,若要在特定目录解压缩,可以使用这个参数.-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 欲解压的目录

那么filename.tar.bz2是我们自定义的文件名,tar并不会主动产生创建的文件名。我们要自定义。所以扩展名就很重要了。如果不加[-j|-z]的话,文件名最好取为.tar即可。如果是-j参数,代表有bzip2的支持,因此文件名最好就取为.tar.bz2,因为bzip2会产生.bz2的扩展名。至于如果是-z参数,代表了gzip的支持,因此文件名最好就取为*.tar.gz。

  • 使用tar加入-j或-z的参数备份/etc/目录

    使用tar加入-j或-z的参数备份/etc/目录

    这里写图片描述

    两种压缩方式的比较

看到两种压缩的方式了吗,bzip2压缩确实比gzip压缩率高,所以推荐用bzip2来进行备份。

  • 查询tar文件的数据内容(可查看文件名),与备份文件名是否有根目录的意义
  • 要查看文件名非常简单,可以这样做:

    查询tar文件的数据内容

  • 将解压缩的文件解压到指定位置(-C参数的应用)
    将解压缩的文件解压到指定位置

  • 仅解开单个文件的方法
    首先我们需要使用-jtv找到你要的文件名,然后将该文件名解开即可。
    1.先找到我们要的文件名,假设解开shadow文件。

    仅解开单个文件的方法

    2.将该文件解开。语法和实际如下:

    解压指定的文件操作
     

  • 打包某目录,但不包含该目录下的某些文件的做法(–exclude=FILE)
    假设我们想要打包/etc /root 这几个重要的目录,但却不想要打包/root/etc*开头的文件,因为该文件我们都是刚才已经创建的备份文件。而且假设这个新的打包文件要放置称为/root/system.tar.bz2,当然这个文件不要自己打包自己(因为这个文件放置在/root下面),此时我们可以通过–exclude的帮忙。so you can do that:
[root@www ~]#tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \>--exclude=/root/system.tar.bz2 /etc /root

详情可参见<鸟哥的Linux私房菜>第九章 ->Linux文件与文件系统的压缩与打包