归档与备份

1 压缩

压缩算法分为两大类:无损压缩和有损压缩。

1.1 gzip

这个gzip程序被用来压缩一个或多个文件,当执行gzip命令时,则原始文件的压缩版就会替代原始文件,相对应的gunzip程序被用来把压缩文件复原为没有被压缩的版本。

选项 说明
-c 把输出写入到标准输出,并且保留原始文件。
-d 解压缩,相当于gunzip
-f 强制压缩,即使原始文件的压缩文件已经存在了,也要执行
-h 显示用法信息,也可用–help选项来指定
-l 列出每个被压缩文件的压缩数据,也可用–list选项
-r 若命令的一个或多个参数是目录,则递归地压缩目录中的文件,也可用–recursive选项来指定
-t 测试压缩文件的完整性。也可用–test选项来指定
-v 显示压缩过程中的信息,也可用–verbose选项来指定
-number 设置压缩指数,number是一个在1(最快最小压缩)到9(最慢,最大压缩)之间的整数,数值1和9也各自用–fast和–best选项来表示。默认值是6

另外,对应于gzip还有一个程序,叫做zcat,他等同于带有-c选项的gunzip命令,它可以被用来如cat命令做用于gzip压缩文件:
[me@linuxbox ~]$ zcat foo.txt.gz | less
还有一个zless程序,它与上面的管道线有相同的功能。

1.2 bzip2

这个bzip2程序,与gzip程序相似,但是使用了不同的压缩算法,舍弃了压缩速度,而实现了更高的压缩级别。在大多数情况下,它的工作模式等同于gzip。由bzip2压缩的文件,用扩展名.bz2来表示。之前讨论的所有选项(除了-r),bzip2程序同样也支持。伴随着bzip2程序,有bunzip2和bzcat程序来解压压缩文件。bzip2recover程序,其会试图恢复受损的.bz文件。

2 归档文件

一个常见的与文件压缩结合一块使用的文件管理任务是归档,归档就是收集很多文件,并把它们捆绑成一个大文件的过程。归档经常作为系统备份的一部分来使用。当把旧数据从一个系统移到某个类型的 长期存储设备中时,也会用到归档程序。

1.2 tar

全称tape archive,这是一款磁带备份的工具。扩展名为.tar和.tgz的文件,各自表示"普通"的tar包和被gzip程序压缩过的tar包。一个tar包可以由一组独立的文件,一个或多个目录,或者两者混合体组成。命令语法如下:
tar mode[options] pathname…
这里的mode是指以下操作模式(这里只展示一部分)之一:

模式 说明
c 为文件和/或目录列表创建归档文件
x 抽取归档文件
r 追加具体的路径到归档文件的末尾
t 列出归档文件的内容
[me@linuxbox ~]$ mkdir -p playground/dir-{00{1..9},0{10..99},100}
[me@linuxbox ~]$ touch playground/dir-{00{1..9},0{10..99},100}/file-{A..Z}
[me@linuxbox ~]$ tar cf playground.tar playground

这个命令创建了一个名为playground.tar的tar包,其包含了整个playground目录层次结果,我们可以看到模式c和选项f,其被用来指定这个tar包的名字,模式和选项可以写在一起,而且不需要开头的短横线,注意,必须首先指定模式,然后才是其他的选项。
要想列出归档文件的内容,我们可以这样做:

[me@linuxbox ~]$ tar tf playground.tar

为了得到更详细的列表信息,我们可以添加选项v:

[me@linuxbox ~]$ tar tvf playground.tar

现在,抽取tar包playground到一个新位置,我们先创建一个名为foo的新目录,然后抽取tar包中的文件:

[me@linuxbox ~]$ mkdir foo
[me@linuxbox ~]$ cd foo
[me@linuxbox ~]$ tar xf ../playground.tar
[me@linuxbox ~]$ ls
playground

当抽取一个归档文件时,有可能限制从归档文件中抽取什么内容。例如,如果我们想要抽取单个文件,可以这样实现:

tar xf archive.tar pathname

通过给命令添加末尾的路径名,tar命令就只会恢复指定的文件,可以指定多个路径名。注意,路径名必须是完全的,精准的相对路径名,就如存储在归档文件中的一样。当指定路径名的时候,通常不支持通配符;然而,GUN版本的tar命令,通过–wildcards选项来支持通配符。
tar xf …/playground2.tar --wildcards ‘home/me/playground/dir-*/file-A’
这个命令将只会抽取匹配特定路径名的文件,路径名中包含了通配符dir-*
tar命令经常结合find命令一起来制作归档文件,在这个例子里,我们将会使用find命令来产生一个文件集合,然后这些文件被包含到归档文件中。
find playground -name ‘file-A’ -exec tar rf playground.tar ‘{}’ ‘+’

1.3 zip

这个zip程序既是压缩工具,也是一个打包工具。
zip options zipfile file…
例如,制作一个playground的zip版本的文件包,这样做:
[me@linuxbox ~]$ zip -r playground.zip playground
除非我们包含-r选项,要不然只有playground目录(没有任何的内容)被存储。虽然会自动添加.zip扩展名,但是为了清晰起见,我们还是包含了文件扩展名。
zip命令会使用两种存储方法之一,来添加文件到文件包中:要不它会"store"没有压缩的文件,正如这里所示,或者它会"deflate"文件,执行压缩操作。在存储方法之后显示的数值表明了压缩量。因为我们的playground目录只是包含空文件,没有对它的内容执行压缩操作。
使用unzip来直接抽取一个zip文件的内容

[me@linuxbox ~]$ cd foo
[me@linuxbox foo]$ unzip ../playground.zip

对于zip命令(与tar命令相反)要注意一点,就是如果指定了一个已经存在的文件包,其被更新而不是被替代,这意味着保留次文件包,但是会添加新文件,同时替换匹配的文件,可以列出文件或者有选择从一个zip文件包中抽取文件,只要给unzip命令指定文件名。
unzip -l playground.zip playground/dir-87/file-Z
使用-l选项,导致unzip命令指示列出文件中的内容而没有抽取文件。如果没有指定文件,unzip程序将会列出文件包中的所有文件。添加这个-v选项会增加列表的冗余信息。注意当抽取的文件与已经存在的文件冲突时,会在替代文件之前提醒用户。
zip命令可以接受标准输入,所以它可以被用来压缩其他程序的输出。
ls -l /etc/ | zip ls-etc.zip -
在这个例子里,我们把ls命令的输出管道到zip命令,像tar命令把末尾的横岗解释为”使用标准输入作为输出文件“
这个 unzip 程序允许它的输出发送到标准输出,当指定了-p 选项之后:
[me@linuxbox ~]$ unzip -p ls-etc.zip | less

3 同步文件和目录

维护系统备份的常见策略是保持一个或多个目录与另一个本地系统(通常是某种可移动的存储设备)或者远端系统中的目录(或多个目录)同步。
rsync能同步本地与远端的目录,通过使用rsync远端更新协议,此协议运行rsync快速地检测两个目录的差异,执行最小量的复制来达到目录间的同步。
rsync options source destination
rsync -av playground foo
-a(递归和保护文件属性)和-v选项(冗余输出),在foo目录中制作一个playground目录的镜像。
rsync程序的真正好处之一,是它可以被用来在网络间复制文件。
第一种方法要求一个系统已经安装了rsync程序,还安装了远程shell程序。
第二种方法就是通过使用rsync服务器。

猜你喜欢

转载自blog.csdn.net/weixin_41811413/article/details/86564812