1、压缩文件的用途与技术
文件压缩原理,目前计算机系统中所使用的Bytes单位,其实计算机最小计量单位应该是bits,1Byte=8bits,若是记录的数据是1,那么只需要用到一个位就行,可是在实际中还是会用到8个位,所以可以将没有使用的空间丢出,让文件占用空间变小。还有一种压缩技术也很有趣,是将重复的数据进行统计记录,比如记录的数据是100个1,那么会记录两个数据,一个100,一个1,这样也能精简文件文件记录的容量。压缩过的文件是不能直接使用的,要将它还原到未压缩之前的模样,也就是解压缩。压缩后与压缩的文件所占用的磁盘空间大小就称为压缩比。
2、Linux 系统常见的压缩指令
在linux中压缩文件的扩展名大多是,“*.tar,*.tar.gz,*.tgz,*gz,*Z,*bz2,*xz”,这是因为linux中压缩指令非常多,不同的压缩指令使用的技术不同,所以彼此之间压缩和解压缩是无法互通的。所以以扩展名来表示是使用什么指令压缩的,这样就可以知道通过什么解压缩指令来解压缩了。 常见的压缩文件扩展名:
2.1 gzip,zcat/zmore/zless/zgrep
显示出压缩比,再比较两个文件大小。
很明显,压缩之后文件变小,当使用gzip进行压缩时,在默认状态下,原本的文建会被压缩成.gz的文件名,并且原始文件不存在,这个压缩文件在windows中可以被winrar/7zip解压缩。gzip提供了1-9的压缩等级,一般使用默认的6就可以。
cat/more/less可以使用不同的方式读取纯文本文件,zcat/zmore/zless则可以对应的读取纯文本文件压缩之后的压缩文件。
2.2 bzip2,bzcat/bzmore/bzless/bzgrep
如果说gzip是为了取代compress并提供更好的压缩比而成立的,那么bzip2则是为了取代gzip并提供更佳的压缩比。bzip2使用方法和gzip几乎相同。
和之前gzip压缩对比,可以看到bzip2压缩比更高。
2.3 xz,xzcat/xzmore/xzless/xzgrep
是一个比bzip2压缩比更高的软件。使用方法和之前的也基本一样。ls
对比三种压缩完成之后的容量。
根据自己需要选择压缩工具,压缩比高的自然运行时间更慢。
3、打包指令:tar
前面的指令大多是针对单一文件进行压缩,虽然他们也能对目录进行压缩,但是对目录的压缩其实也是对目录内文件分别压缩,这种将多个文件或目录包成一个大文件的指令功能,称为打包指令。tar可以将多个目录或文件打包成一个大文件,同时还可以通gzip/bzip2/xz的支持将该文件同时进行压缩。
3.1 tar
tar 的选项和参数很多,一般记住常用的就可以。
其实最简单的使用tar 只要记忆下面的方式即可:
压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录
查询:tar -jtv -f filename.tar.bz2
解压缩: tar -jxv -f filename.tar.bz2 -C
tar 不会主动创建文件名,需要自己定,这样扩展名就很重要了。如果不加【-z/-j/-J】则文件最好取为*.tar,如果是 -j选项,代表有bzip2支持,则文件名最好取为 *.tar.bz2,如果是 -z选项,文件名最好取为 *.tar.gz。一般而言 -f后直接加文件名,所以一般将-f选项独立出来,比较不容易发生问题。
*使用tar加入 -z,-j或-J备份/etc/目录
加入time会显示程序运行时间,加上 -v选项,显示正在作用的文件名,加入-p保留原文件的权限和属性。
分别使用-j,-J产生.bz2和.xz的压缩文件,可以看到随着压缩比的增高运行时间也增高。加入-p选项是为了保留原本文件的选项和属性。
*查阅tar文件的数据内容(可查看文件名),与备份文件有根目录的意义
可以根据tar指令来看:
结果:
加上-v选项会详细列出文件的权限和属性,如果只是想知道文件名,只需要去掉-v选项即可。如下:
换一个参数 -z来查看.gz后缀的文件内容:
只显示了文件名。可以看出上面的文件名都没有了根目录。(前面步骤有误导致还是在根目录下)。重新操作。
注意和之前指令的不同。
没有了根目录,拿掉根目录其实是一种安全的做法,如果没有拿掉根目录那么解压缩之后文件会是绝对路径会覆盖之前的etc文件,这样备份数据会覆盖现在的数据。如果需要备份根目录到tar文件中可以使用-P这个选项。
将备份的数据解压缩,并考虑特定目录的解压缩动作(-C 选项的应用)
使用如下指令:
tar -jxf -f /root/etc.tar.bz2 -C /tmp
解开单一文件的方法
只要使用 -jtv找到你要的文件名,然后将文件解开即可。如下指令:重点是要找到正确的文件名。
tar -jtv -f /root/etc.tar.bz2 |grep 'shadow'
tar -jxf -f /root/etc.tar.bz2 etc/shadow
打包某目录,但不含该目录下的某些文件之作法
使用 --exclude 就是不包含的意思。使用如下指令:
tar -jcv -f /root/system.tar.bz2 --exclude=/root/rtc* \
--exclude=/rot/system.tar.bz2 /etc /root
反斜杠是可以在第二行输入,这个命令将打包/etc/ /root目录,三十却不想打包/root/etc*开头的文件,且新的打包文件为/root/system.tar.bz2,并且这个文件也不能打包自己,所以使用两个exclude除掉我们不想打包的文件。
仅备份比某个时刻新的文件
--newer-mtime这个选项,其实这是两个选项,可以使用如下指令:
tar -jcv -f /root/etc.newer.then.apsswd.tar.bz2 \
--newer-mtime="2018/12/17" /etc/*
基本名称:tarfile,tarball
tar打包出来的文件有没有经过压缩所得到的文件称呼不同。如果仅仅是打包这个文件称为:tarfile。如果还进行了压缩的支持,称为tarball。
特殊应用:利用管线命令与数据流
tar中有一种方式最特殊,那就是通过标准输入和输出的数据流重导向。以及管线命令的方式,将待处理的文件一边打包一边解压缩到目标目录去。
4、XFS文件系统的备份与还原
使用tar通常是针对目录树系统进行备份的工作,如果要针对整个文件系统来备份和还原,那么就需要xfsdump和xfsrestore这两个工具。
4.1 XFS 文件系统备份 xfsdump
xfsdump不仅可以进行文件系统的完整备份还可以进行累积备份,累积备份也就是第一次备份之后等国一点时间再备份时就可以选择累积备份,新备份的数据只会记录与第一次完整备份有差异的文件。
使用xfsdump进行累积备份
只有经过上面的完整备份之后才能进行累积备份。
4.2 XFS文件系统还原
备份文件就是在急用时可以回复系统的重要数据,复原系统使用xfsrestore这个指令。
5、光盘写入工具
光盘在如今用到的越来越少,但是在某些特殊场合还是需要用到,这一部分主要涉及两个指令。一个是mkisofs(将所需备份的数据创建成为一个镜像文件iso),cdrecord(将镜像文件烧录至光盘或者DVD中)。
5.1 mkisofs :创建镜像文件
烧录可开机和不可开机的光盘使用方法不太一样。
制作一般数据光盘镜像文件
mkisofs使用方法如下:
5.2 cdrecord:光盘烧录工具
指令wodim进行烧录,是链接到cdrecord上的。
6、其他常见压缩备份工具
6.1 dd
前面使用过这个指令,但是这个指令不仅仅能用来制作一个文件,dd最大功效可能在于备份,因为dd可以直接读取磁盘设备的内容,几乎是直接读取扇区然后将整个设备文件备份成一个文件。
范例:将/etc/passwd 备份到/tmp/passwd.back
dd不会处理文件系统,它是直接在磁盘扇区上进行复制。
6.2 cpio
这个指令可以备份任何东西,包括设备文件,但是它不会主动去找文件备份,一般要配合find等可以找到文件名的指令来告知cpio该备份的数据在哪里。使用方法:
范例:找出/boot下面所有文件然后备份到/tmp/boot.cpio
用find boot找出文件名,顺着管线(|)就可以将文件名传给cpio进行处理。复制时最好不要带根目录,这样解压时会覆盖原本的文件。
7、总结
(1)压缩指令通过一些运算方法将原本的文件进行压缩,以减少文件所占用的磁盘容量。
(2)常见的压缩文件扩展名:*.gz,*.bz2,*.xz,*.tar.gz,*.tar.bz2,*.tar.xz
(3)常见的压缩指令:gzip,bzip2,xz,压缩率最佳的是xz,如果不考虑时间成本,则可以使用xz进行压缩。
(4)tar可以用来进行文件打包,同时支持上面的几种压缩。
(5)压缩:tar -Jcv -f filename.tar.xz 要被压缩的文件或目录(J 可换为 j,z,分别代表xz,bz2,gzip压缩)。
(6)查询:tar -Jtv -f filename.tar.xz (J 可换为 j,z,分别代表xz,bz2,gzip压缩)。
(7)解压缩:tar -Jxv -f filename.tar.xz (J 可换为 j,z,分别代表xz,bz2,gzip压缩)
(8)xfsdump 指令可以备份文件系统或单一目录
(9)xfsdum 的备份若针对文件系统时可以用0-9的差异备份。
(10)xfsrestore 指令可以还原被xfsdump创建的备份文件
(11)创建光盘烧录数据可以使用mkisofs
(12)可以使用wodim写入CD
(13) dd可以备份完整的分区或磁盘,dd可读取磁盘的扇区数据
(14) cpio备份要搭配find类似指令读入欲备份的文件名。