Linux中常用的有3种压缩工具gzip,bzip2,xz,最早出现的是gzip,压缩比也不如后两者,xz最后出现,压缩比也是最佳的。

1、gzip(后缀名.gz)

         -d                           #解压缩(gunzip)

         -c                           #将压缩后的结果输出至标准输出

                                            gzip -c /path/to/somefile > /path/to/filename.gz

         -num                     #num指定压缩比(0-9),默认为6

         zcat filename.gz    #直接查看gzip压缩后的文件的内容

[root@baby-CentOS abc]# gzip -c /etc/passwd > ./passwd
[root@baby-CentOS abc]# zcat passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
.....
.....


2、bzip2(后缀名.bz2)

         -d                              #解压缩(bunzip2)

         -c                               #将压缩后的结果输出至标准输出

         -num                         #num指定压缩比(0-9),默认为6

         -k                               #保留原文件

         bzcat filename.bz2    #直接查看gzip压缩后的文件的内容

    

3、xz(后缀名.xz)

         -d                               #解压缩(unxz)

         -k                               #保留原文件

         xzcat                           #直接查看gzip压缩后的文件的内容

         其他选项与bzip2类似。


归档工具:tar

      能够实现将多个文件打包成为单个文件,然后进行压缩

         -c                     #打包文件

         -x                     #加压缩或解包功能,搭配-C选项可在指定目录中解开打包文件

         -t                     #直接查看打包文件(查看文件名)

                                 -c,-t,-x这3个选项不可同时使用  

         -v                     #显示解压或打包过程的详细信息

         -f filename       #在打包过程中filename为打包后生成的文件名,在解压过程中,filename为需要被处理的打包文件

       -C dirname#在指定目录中解开打包文件

         -z                     #通过gzip进行压缩

         -j                      #通过bzip2进行压缩

         -J                     #通过xz进行压缩

         -p(小写)       #保留备份数据的原本权限与属性

         -P(大写)       #保留绝对路径

备份/etc目录

[root@baby-CentOS abc]# tar -zc -f etc.tar.gz /etc > /dev/null 2>&1
[root@baby-CentOS abc]# tar -jc -f etc.tar.bz2 /etc > /dev/null 2>&1
[root@baby-CentOS abc]# tar -Jc -f etc.tar.xz /etc > /dev/null 2>&1
[root@baby-CentOS abc]# ll -h
total 23M
-rw-r--r--    1 root root 8.3M Apr 26 09:31 etc.tar.bz2
-rw-r--r--    1 root root 9.6M Apr 26 09:31 etc.tar.gz
-rw-r--r--    1 root root 5.0M Apr 26 09:32 etc.tar.xz
.........

这里可见3种压缩方式在压缩比上的差异。


查看压缩包中的文件名

[root@baby-CentOS abc]# tar -tJ -f etc.tar.xz | head
etc/
etc/sysctl.conf
etc/rpm/
etc/rpm/macros.prelink
etc/rpm/macros.texlive
........

加上-v后可查看文件的详细属性

[root@baby-CentOS abc]# tar -tvJ -f etc.tar.xz | head
drwxr-xr-x root/root         0 2015-04-26 05:55 etc/
-rw-r--r-- root/root      1150 2013-11-23 05:20 etc/sysctl.conf
drwxr-xr-x root/root         0 2015-03-25 04:39 etc/rpm/
-rw-r--r-- root/root       297 2013-08-19 20:36 etc/rpm/macros.prelink
-rw-r--r-- root/root       173 2011-12-08 02:05 etc/rpm/macros.texlive

解压到指定的目录下

[root@baby-CentOS abc]# tar -xJ -f etc.tar.xz -C ./etc/
[root@baby-CentOS abc]# ll -d etc
drwxr-xr-x. 127 root root 12288 Apr 26 09:39 etc


还有一种比较特殊的备份工具cpio,它可以备份任何文件,但是它需要依靠管道来获取需要备份的文件,通常和find配合使用。

cpio:

-o#将数据输出到文件和设备上(备份使用的选项)

-B#Blocks增加至5120bytes,默认是512bytes(这样可让专注速度加快)

-i#将数据从备份文件中提取(用于还原)

-d#自动新建目录

-u#自动将较新的文件覆盖

-t#配合-i查看备份文件内容

-v#显示详细过程

-c#以portable format方式存储


备份/etc目录下两天之内被改动过的文件

[root@baby-CentOS abc]# find /etc/ -mtime -2 | cpio -ovcB > ./etc.cpio
/etc/
/etc/blkid
/etc/blkid/blkid.tab
/etc/mtab
/etc/gconf/gconf.xml.defaults
/etc/gconf/gconf.xml.mandatory
/etc/gconf/gconf.xml.system
/etc/resolv.conf
/etc/pki/nssdb
/etc/adjtime
1 block
[root@baby-CentOS abc]# ll etc.cpio 
-rw-r--r-- 1 root root 5120 Apr 26 10:01 etc.cpio

查看备份的文件,注意里面的文件名都是绝对路径的,若直接还原会覆盖原有文件。

[root@baby-CentOS abc]# cpio -ivct < etc.cpio 
drwxr-xr-x 126 root     root            0 Apr 26 05:55 /etc/
drwxr-xr-x   2 root     root            0 Apr 25 14:57 /etc/blkid
-rw-r--r--   1 root     root          484 Apr 25 14:57 /etc/blkid/blkid.tab
-rw-r--r--   1 root     root          555 Apr 26 05:55 /etc/mtab
.......

用--no-absolute-filenames还原至当前目录下

[root@baby-CentOS etc]# cpio -ivcd --no-absolute-filenames < ../etc.cpio 
cpio: Removing leading `/' from member names
etc
etc/blkid
etc/blkid/blkid.tab
etc/mtab
etc/gconf/gconf.xml.defaults
etc/gconf/gconf.xml.mandatory
etc/gconf/gconf.xml.system
etc/resolv.conf
etc/pki/nssdb
etc/adjtime
6 blocks
[root@baby-CentOS etc]# ll etc
total 24
-rw-r--r-- 1 root root   44 Apr 26 10:09 adjtime
drwxr-xr-x 2 root root 4096 Apr 26 10:09 blkid
drwxr-xr-x 5 root root 4096 Apr 26 10:09 gconf
-rw-r--r-- 1 root root  555 Apr 26 10:09 mtab
drwxr-xr-x 3 root root 4096 Apr 26 10:09 pki
-rw-r--r-- 1 root root   79 Apr 26 10:09 resolv.conf