Linux 文件与文件系统的压缩和打包
1.压缩文件案的用途
压缩文件,顾名思义就是对文件进行压缩,通过一些技术手段在不改变信息内容的前提下减少档案占用磁盘的内存,在进行网络传输时,可以减少传输时间。
2.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 的压缩 |
3.压缩工具之:gzip、zcat
gzip是Linux当前用的最广的压缩工具。
命令:gzip
解释:压缩文件
命令:zcat
解释:查看压缩文件内容
语法:
gzip [选项] 档案名
zcat 档案名
选项
选项 含义
-c 将压缩的数据输出到屏幕上,可透过数据流重导向来处理
-d 夹压缩的参数显示,解压
-t 检验一个压缩文件的一执行,检查档案是否出差错
-v 显示出原档案/压缩档案的压缩比等信息
-# 压缩等级:-1 最快,压缩比差,-9 最慢,压缩比好,默认是:-6
例子:
复制一个 :etc/hosts 文件到 /test 文件夹下,然后最 hosts 档案进行压缩
从上面可以看出,当你压缩之后,原来的档案已经不见了,只剩下一个压缩文件,但你希望压缩完,源文件还在怎么做?
加上 -c 参数:
使用命令:gzip -c hosts > hosts.gz
解压 hosts.gz 压缩文件,使用命令:gzip -d hosts.gz
4.压缩工具之:bzip2、bzcat
命令:bgzip2
解释:压缩文件
命令:bzcat
解释:查看压缩文件内容
语法:
bgzip2 [选项] 档案名
bzcat 档案名
选项
选项 含义
-c 将压缩过程产生的数据输出到屏幕上
-d 解压缩
-k 保留原档案
-z 压缩的参数
-v 显示原档案/压缩档案的压缩比信息
-# 压缩比参数,-9:最佳,-1:最快
例子:
从 : /etc 拷贝一个hosts 档案到 /test 文件夹下,然后使用 bzip2 进行压缩和解压
如果想压缩后保留原档案怎么做?
使用命令:bizp -c hosts > hosts.bz2
查看bzip2的压缩文件,使用bzcat命令:
5.打包工具: tar
功能:归档,把多个文件归档成一个文件,但是没有压缩功能,,不仅文档大小不会变小反而会增大,因为多了一个打包的东西,它也是需要占用空间的。
例子:当你进行搬迁的时候,只需要叫搬家公司把你家里零零散散的东西,全部打包放入一辆打的汽车里面,不用一次拿一点,把东西进行分类打包,收起来方便,找起来也方便,但是占用的空间还是一样的,因为没有对这些东西进行压缩,所以说打包就是让你的物品看起来有规律,根据你自己的方式。
命令:tar
解释:打包文件
语法:
tar [选项] 档案
选项
选项 含义
-c 创建归档文件
-x 解开归档文件
-t 查看压缩文包内的文件(不解档的情况下)
-z 用Gzip压缩或者解压
-j 用bzip压缩或者解压
-v 显示归档或解档过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 提示解压到目录
例子:
创建一个归档文件(-c),显示归档过程(-v),指明打包后的名字(-f)为:hosts.tar,打包的 hosts 这个档案
解释:把档案 hosts 归档为一个名为:hosts.tar的归档文件,并显示归档过程。
命令:tar -cvf hosts.tar hosts
归档后归档文件还变大了:
上面可以发现,归档的时候原档案还是存在的,但是你想归档的时候自动删除原档案怎么做?
使用命令:tar -cvf hosts.tar hosts --remove-files
如何在解档的情况下查看档案的内容呢?
使用命令:tar -tvf hosts.tar
如何解压这个档案?
使用参数(-x)解档,使用参数(-f)指令解档文件,参数(-v)显示接档过程:
使用命令:tar -xvf hosts.tar
把打包文件解压到指定文件夹中:
在 /test 新建一个文件夹,package ,然后将 hosts.tar 解档到 package 这个文件夹中
例子2:把多个文件打包在一起
把 /etc 文件夹下的services、passwd、hosts文件夹拷贝到 /test 文件夹下,然后将他们打包后命名为:mypackage01.tar
不解档的情况下查看档案内容:
现在已经把三个档案全部打包在 mypackage01.tar 当中,我们如何之解档我们需要的档案呢?比如解档 passwd 这个档案:
使用命令:tar -xvf mypackage01.tar passwd
6.打包压缩
在打包之后同时对这个文件进行压缩。
命令:tar
解释:打包文件
语法:
tar [选项] 档案
选项
选项 含义
-c 创建归档文件
-x 解开归档文件
-t 查看压缩文包内的文件(不解档的情况下)
-z 用Gzip压缩或者解压
-j 用bzip压缩或者解压
-v 显示归档或解档过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 提示解压到目录
例子:
结合上面的知识,在打包文件 services、passwd 、hosts文件的同时,删除原档案,然后再使用Gzip进行压缩:
使用命令:tar -zcvf mypackage.tar.gz * --remove-files
解释:cvf参数和上面一样代表一个简单的归档,加上z参数代表还要进行压缩,并指定用Gzip,* 代表是对所有文件进行操作,--remove-files 代表只保留打包压缩文件,注意:打包压缩的后缀名是:.tar.gz 代表是先进行打包然后用Gzip压缩。
如何进行解档和解压呢?
使用命令:tar -zxvf package02.tar.gz
解释:-z参数后面跟了一个-x参数,此时-x参数不仅有解档的功能,还具有解压的功能,而且解压的是Gzip类型的压缩文件。
同理可以在打包的同时也可以用bzip2来压缩和解压,只需要把上面的-z参数改变成-j即可,如下命令:
打包压缩:tar -jcvf mypackage.tar.gz * --remove-files
解压解档:tar -jxvf mypackage.tar.gz
7.完整备份工具:dump
简介:dump的功能顾名思义就是对文件系统进行备份,他的强大之处是可以为备份设置一个等级,提高备份的效率,比如完全备份是 level 0,level 1是差异备份,level s是增量备份,那你第一次进行 dump 后,再进行第二次 dump 时, 你可以指定不同的备份等级,假如指定等级为 1 时,此时新备份的数据只会记录与第一次备份所有差异的档案而已。简单如下图所示:
注意:备份级别的问题,数据备份,在进行备份时,是以级别比它低的为参考点的,比如:第一到第四次备份级别分别为:0、1、2、3,那么就是增量备份,如果第一到第四次备份级别分别为:0、9、8、7,那就是差异备份。下图解释:
命令:dump
语法:
dump [-Suvj] [-level] [-f 备份档] 待备份资料
选项含义
选项 含义
-S 仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕
-u 将这次 dump 的时间记录到 /etc/dumpdates 档案中
-v 将 dump 的档案过程显示出来
-j 加入 bzip2 的支持!将数据进行压缩,默认bzip2 压缩等级为 2
-level 从 -0 ~ -9 共十个等级
-f 类似 tar ,后面接产生的档案,亦可接dev/sdax 装置文件名等
-W 列出在 /etc/fstab 里面的具有 dump 定 partition 是否有备份过
例子:备份一个分区试一试吧。
查看一下我们现在挂载的分区有几个,命令:df -h
查看备份 /dev/sda5 文件系统需要多少容量,命令:dump -S /dev/sda5
现在开始对/dev/sda5 做一个全备份,使用级别0,文件名记录成为 /mydump/1.dump,同时更新记录文件:
命令:dump -0u -f mydump/1.dump /dev/sda5
上面的第一次完全备份已经完成了,我们可以看一下 :/etc/dumpdates 档案查看备份时间:
在设备:/dev/sda5 下创建几个档案,分别命名为:test01,test02,test03,然后做增量备份,级别是1,那么现在2.dump文件只备份了test01, test02, test03这三个文件。
再创建一个档案,test04,做一个备份,级别是2,可以从级别的增长看出是增量备份,现在备份级别是2,前面级别1,比它小,所以以级别1的档案为参考进行备份,所以3.dump只备份了一个档案,那就是test04。
我们可以查看一下我们的备份文件,在目录 /mydump/下
提示:差异备份的原理和增量备份的原理是一样的。
8.恢复备份文件:rostore
命令:restore
语法:restore -r [-f dumpfile]
选项
选项 含义
-t 查看dump文件备份的数据
-C 此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较,最终会列出【在 dump 档案内有记录的,且目前文件系统不一样】的档案
-i 进入互动模式,可以仅还原部分档案,用在 dump 目录时的还原
-r 将整个 filesystem 还原的一种模式,用在还原针对文件系统的 dump 备份
常用选项
-h 察看完整备份数据中的 inode 与文件系统 label 等信息
-f 接你要处理的那个 dump 档案
-D 与 -C 进行搭配,可以查出后面接的挂载点与 dump 内有不同的档案
例子1:
在不恢复dump文件时,查看1.dump里面的内容
使用命令:restore -t -f /mydump/1.dump
现在试着破坏一下 :/dev/sda5的文件,然后恢复一下:
恢复文件,先进去到:/mmt/sda5 目录下,然后逐一恢复备份的文件:
例子2:仅还原部分档案的 restore 互动模式
某些时候你并不需要把备份文件的东西全部恢复,只想恢复你想要的部分,这是就可以使用档案恢复的互动模式,可以选择你想要回复的文件。
这个例子依旧接着上面的例子的基础,先删除 /mnt/sda5下的test文件,然后只恢复备份 2.dump 的 test02这个文件,如何做呢?
恢复部分文件,仅恢复test02
9.其他常见的压缩与备份工具:dd
9.1.dd命令
简介:这个命令可以用来制作一些大文件,同样在备份的时候是一个很有用的工具,dd命令可以复制几乎硬盘的所有内容。
1.建立大型档案,
使用命令:dd
例子:
在 : /test 建立一个档案名为newdev,新建一个200M的大档案,如何做呢?
看一下这个档案的信息,可以看到这个档案的大小是200M:
2.数据备份
比如现在想把 /dev/sda1 这个分区的文件全部复制出来怎么做呢?
使用命令:dd if=/dev/sda1 of=mybackfiles
现在把挂载在 /mnt/sda5 上的设备:/dev/sda5 给卸载,格式化掉,然后看一下是否可以使用刚刚备份的大文件去恢复这个分区?
小技巧:你还可以使用dd来实现硬盘的对拷功能,比如你现在有一个硬盘,设备名称是:/dev/sda ,另一个名称是:/dev/sdb 使用命令dd,指定输入文件位置和输出文件位置,即:dd if=/dev/sda of=/dev/sdb,就能实现两个硬盘数据的拷贝。
原文地址:
https://blog.csdn.net/qq_36243942/article/details/82872464