linux 解压、压缩与备份
一、压缩与解压
1、gzip,zcat
gzip [-zdtv#] 文件名
参数
-c 将压缩的数据输出到屏幕
-d 解压缩
-t 检查一个压缩文件的一致性
-v 显示源文件与压缩文件的压缩比
-#压缩等级,1-9,一般使用默认使用6
测试:
使用gzip -c-9 compalie.pdf>compalie.pdf.gz的时候看到ratio为10.0% 说明centos下的ration的计算公式不是compress ration=compressed size/uncompressed size,而是(uncompressed size-compressed size)/(uncompressed size),也就是被压缩了的大小与原始大小的比率。可以使用zcat在不解压的条件下查看被压缩的内容。
2、bzip2,bzcat
bzip2 [-cdkzv#] filename
-c 将压缩的数据输出到屏幕,可以使用流的重定向
-d 解压缩
-k 保留源文件
-z 压缩参数
-v 显示压缩比
-# 与gzip一样
测试:
使用等级为9的压缩指令可以就按到compaile.pdf 节省了9.56%的空间,小于gzip的10%,而test.a2daps的空间节省了约21%,远远高于gzip的7%
3、打包命令 tar
因为gzip与bzip2仅仅能够对单一的文件进行压缩,单对文件夹进行这两个指令的时候是循环将子文件进行压缩的,不具备对文件夹压缩的能力 tar具备这个能力
压缩: tar [-j|-z][cv][-f 新建的文件名] filename
查看 tar [-j|-z][tv][-f 压缩好的文件名]
解压缩 tar [-j|-z][xv][-f 需要解压的文件名][-c 解压的目录]
参数的解释为:
-c 新建打包文件
-t 查看打包文件的内部文件名
-x 解压缩,解打包
-j 使用bzip2压缩
-v 在解压缩或者压缩过程中将正在处理的文件名显示出来
-z 使用gzip压缩
-C 解压到特定的文件夹
-p 保留数据原有的权限
-P 保留原始的路径
常用的tar的命令为:
压缩 tar -jcv -f filename.tar.bz2
查询 tar -jtv -f filename.tar.bz2
解压缩 tar -jxv filename.tar.bz2 -c 预解压的目录
解开已经压缩的文件中的部分文件
1、查找是否存在 tar -jtv -f filename |grep 'part filename'
2、将文件解开 tar -jxv -f filename 待解开文件名
3、接下来备份一下/etc(配置文件)文件夹,对比一下使用gzip和bzip2的效果,使用p是为了保持原有的权限,这个很重要,可以看出来使用bzip2的压缩格式有更好的效果
使用tar -jtv -f etc.tar.bz2查看bzip2压缩的文件的内容发现/etc前面的/不见了,这样的原因在于当解压的时候如果存在/的话会解压到根目录下去,如果不要/的话可以有效的避免这种解压导致的覆盖原始的/etc的现象。
使用tar -jxv -f etc.tar.bz2 etc/mailcap解压部分文件,例如解压etc/mailcap文件,源文件中还是有的,并没有因为解压删除了
使用指令 tar -jcv -f targetfile.tar.bz2 --exclude=file(dir) --exclude=targetfile.tar.bz2 need_tar_file,其中可以使用\作为连接符。
使用指令tar -jcv -f targetfile.tar.bz2 --newer-mtime='2018/10/21' /dir/*,来进行更新文件的备份
4、tarfile 与tarball
使用tar -cv file.tar filename 进行的话仅仅进行了打包,未进行压缩,就称为tarfile,而使用了压缩指令的话就是tarball。
二、备份与恢复
1、dump[-Suvj][-level][-f 备份文件] 待备份文件
-S :仅仅需要列出来完成此次备份需要的空间
-u:将此次备份的时间记录到/etc/dumpdateS中
-v:显示dump的过程
-j:加入bzip2的支持
-level :dump 的等级
-W:检查文件系统是否有被dump过
使用tar同样可以做到备份,但是tar是将整个文件系统进行备份,但是使用dump的话可以实现对文件系统的增量备份或者差异备份,主要通过dump对于文件系统的等级系统实现的,即level 是类似于tar的完全备份,使用level1仅仅是对当前系统对于level 0系统的变化进行备份,依次下去直到level 9.例如第一天使用dump level0 第二天使用level 1 第三天还是使用level 1,这样可以节省大量的空间。
使用dump 可以备份文件系统和文件,不过只有对于文件系统其才能够使用完全的功能,在使用dump 对非文件系统进行备份的时候等级系统就会失效,仅仅支持level 0
在使用dump进行文件备份后可以使用restore进行恢复,使用man restore自行查看参数,在restore时候要注意一个个的restore。
2、dd
dd最大的功效在于能够直接读取扇区或者磁盘,然后将整个设备备份成一个文件。感觉主要的功能在于分区等的复制,很底层了,包括mbr与分区表。
dd if="input file" of="output file" bs="block size" count="number"
if:input file 也可以是设备
of:output file 也可以是设备
bs :block的大小,默认为512
count:多少个bs.
例子:
dd -if=/dev/hdc of=/tmp/mbr.back bs=512 count=1(拷贝文件系统的mbr),可用看到对于文件夹作为if是不可以使用dd的,而且从参数来看的确是适合于磁盘的拷贝,有很浓重的磁盘的意味。
3、cpio
cpio可以备份任何东西包括设备设备文件(磁带机啊等等,有点强大啊),但是需要使用find寻找文件,而不会主动找文件备份,其可用不管格式的对设备进行备份,使用dd感觉更像是磁盘拷贝.
备份:cpio -ovcB>[file|device]
还原:cpio -ivcdu<[file|device]
查看:cpio -ivct < [file|device]
备份:
-o 将数据copy输出到指定设备
-B 让blocks的大小增大至5120bytes
还原:
-i 将数据或者文件复制到系统中
-d 新建目录
-u 自动比较较新的文件覆盖旧的
-t 配合-i参数,可用查看cpio的新建文件或者设备的内容
通用:
-v 显示过程
-c 一种新的format存储格式
常见的该指令的例子为:
find /boot |cpio -ocvB >/temp/boot.cpio
cpio -idvc </temp/boot.cpio
在使用find etc|cpio -ocvB > etc.cpio备份了etc后发现,其实其备份效果对于普通文件并不好吧,感觉这个指令还是针对外部的硬件设备做备份比较好