一、压缩文件的用途与技术
原理:
1、将一个字节(8bits)内未利用到的部分“丢”出来,以让文件所占空间变小。
2、将重复数据进行统计记录,若数据中有100个1,即“111111……”,则记录为“100个1”。
因为压缩得到的文件无法直接被系统识别并使用,需要先解压缩,而压缩前与压缩后所占用的磁盘空间大小被称作是压缩比。
用途:文件所占的空间变小,硬盘便可以容纳更多的数据。此外,在一些网络数据传输中,也会由于数据量的降低,好让网络带宽用来做更多的工作。
二、Linux系统常见的压缩命令
Linux环境中大多数压缩文件的扩展名:
*.z compress程序压缩的文件
*.gz gzip程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.tar tar程序打包的数据,并没有压缩过
*.tar.gz tar程序打包的数据,并经过gzip的压缩
*.tar.bz2 tar程序打包的数据,并经过bzip2的压缩
1、compress
这是一个非常老旧的压缩命令,由于他压缩的文件已经可以由gzip解开,所以已经被淘汰,只有在老旧的UNIX系统上找到。
2、gzip,zcat
gzip是应用最广泛的压缩命令,目前可以解开compress,zip与gzip压缩的文件。另外,由gzip压缩的文件在windows中可以由winRAR解开。
gzip -c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理
gzip -d:解压缩的参数
gzip -t:可以用来检验一个压缩文件的一致性,看看文件有无错误
gzip -v:可以显示原文件/压缩文件的压缩比等信息
gzip -#:压缩等级,-1最快,压缩比差,-9最慢,压缩比最好,默认-6
用gzip压缩文件时,默认原文件不会保留,若要保留,可以用gzip -c filename>filename.gz
zcat filename.gz 可以读取原文件为文本文档的压缩文件内容而不需要解压开
3、bzip2,bzcat
bzip2是为了取代gzip并提供更佳的压缩比而来的。他的用法和gzip基本类似,而bzip2若要保留原文件可以用-k参数来处理
三、打包命令tar
tar打包或打包压缩时原文件保留
上述压缩命令都是针对单一文件的压缩,虽然gzip和bzip2都可以对目录进行压缩,但实际上是对目录内的文件分别压缩,若要将目录压缩成为单一大文件,则需要配合tar(打包)来使用。
tar的参数非常多,这里只列出常用的几个参数:
-c 新建打包文件
-t 查看打包文件内有哪些文件,重在查看文件名
-x 解打包或解压缩,搭配-C可以在指定的目录解开
-j 通过bzip2的支持进行压缩/解压缩
-z 通过gzip的支持进行压缩/解压缩
-v 将正在处理的文件名显示出来
-f filename(单独写一个参数)后面跟被处理的文件名
-p 保留备份数据的原本权限与属性,常用于备份重要的配置文件
-P 保留绝对路径,即允许在打包文件中存在根目录
--exclude=FILE 在打包的过程中不打包FILE
常用:
tar -jvc -f filename.tar.bz2要被压缩的文件或目录名称
tar -jvt -f filename.tar.bz2显示压缩文件列表
tar -jvx -f filename.tar.bz2-C 欲解压缩的目录
解压打包文件中的部分文件
tar -jvt -f filename.tar.bz2| grep ‘关键字’(在filename.tar.bz2中查找‘关键字’)
tar -jvx -f filename.tar.bz2关键字(可以单独解压出含有关键字的文件)
仅备份比某个时刻新的文件
tar -jvc -f filename.newer.then.tar.bz2--newer-mtime(最后一次文件内容修改时间)=“2018/06/30” filename
基本名称:tarfile(仅打包) tarball(打包并压缩)
利用管道命令与数据流:
1.进入目录
2.tar -cvf – 目录1 | tar-xvf - 将目录1打包的同时在当前目前解开
输入文件和输出文件都变成了-,这分别代表standard input和standard output(缓冲区)
四、完整备份工具 dump
1、dump
dump备份工具对文件系统具有等级备份(差异备份)的功能,例如,第一次以level 0备份/home时会完整备份,下一次若以level 1备份/home,则仅仅备份与level 0相比不同的文件,level 2则备份与level相比有变化的文件。
用dump备份目录时有以下限制:
所有的备份数据都必须在该目录下面
仅支持完整备份
不支持-u参数,即无法创建/etc/dumpdatas这个level备份的时间记录文件
dump [-Suvj] [-level] [-f 备份文件] 待备份数据
常用参数:
-S 仅列出后面的待备份数据需要多少磁盘空间
-u 将这次dump的时间记录到/etc/dumpdatas中
-v 将dump的文件过程显示出来
-j 加入bzip2的支持,将数据进行压缩,默认等级为2
-level -0~9共十个等级
-f 后面接产生的文件
-W 列出在/etc/fstab里面的具有dump设置的分区是否有备份过
2、restore
对于dump备份的文件恢复时则需要使用restore这个命令
-t[-f dumpfile] [-h] 查看dump文件,-h可列出文件的inode和blocks信息
-C[-f dumpfile] [-D 挂载点] 比较dump与实际数据,返回不同的文件
-i[-f dumpfile] 进入互动模式
-r[-f dumpfile] 还原整个文件系统
五、光盘写入工具
mkisofs:新建镜像文件
光盘的格式一般称为ISO9660,这种格式一般仅支持旧版的DOS文件名,即文件名只能以8.3(文件名8字符,扩展名3字符)的方式存在,因此有了-r这个参数
mkisofs [-o 镜像文件] [-rv] [-m file] 待备份文件.. [-V vol] \
>-graft -point isodir=systemdir …
-o 后面接你想要产生的那个镜像文件
-r 通过Rock Ridge产生支持UNIX/Linux的文件数据,可记录较多的信息
-v 显示构建iso文件的过程
-m file 排除文件,即后面接的文件不会备份到镜像文件中
-V vol 新建Vulume
-graft -point graft有转嫁或移植的意思
一般默认情况下,所有要被加到镜像文件中的文件都会被放置在镜像文件中的根目录,如此一来可能会造成刻录后分类不清的问题,因此可以使用-graft -point这个参数,例如:
镜像文件中的目录所在=实际Linux中文件系统的目录所在
/movies=/srv/movies/(在Linux中/srv/movies/中的所有文件放置在镜像文件的/movies目录下)
/linux/etc=/etc(将Linux的/etc目录放置在镜像文件中/linux/etc目录下)
若要将/root,/home,/etc文件备份入镜像文件
mkisofs -r -V ‘linux file’ -o /tmp/system.img-m /home/lost+found -graft-point /root=/root /home=/home /etc=/etc
六、其他常见的压缩与备份工具
1、dd
dd if=”input file” of=”output file” bs=”blocksize” count=”number”
dd可访问扇区,因此dd if=/dev/sdaof=/tmp/mbr.back bs=512 count=1就可以备份硬盘的第一个分区(MBR+分区表)
2、cpio
这个命令功能强大,可以备份任何东西,包括设备文件,但是他不会主动去寻找文件来备份,需要配合find使用。
cpio -ovcB > [file|device] 备份
cpio -ivcdu > [file|device] 还原
cpio -ivct > [file|device] 查看
备份会用到的参数
-o 将数据copy输出到文件或设备上
-B 让默认的blocks可以增加至5120bytes,一般为512bytes,可以让大文件的存储速度加快
还原会使用到的参数
-i 将数据自文件或设备复制到系统当中
-d 自动新建目录
-u 自动以新文件覆盖旧文件
-t 配合-i参数,可以在查看以cpio新建的文件或设备的内容
一些可共享的参数
-v 让存储过程中的文件名在屏幕上显示
-c 一种较新的portable format方式存储
例:
找出/boot下所有文件并备份到/tmp/boot.cpio中
find /boot -print
find /boot | cpio -ovcB > /tmp/boot.cpio
通过find找出文件名,然后通过|将文件传给cpio处理