压缩文件的用途与技术
由于 1 byte = 8 bits
,所以每个byte
当中会有8
个空格,而每个空格可以是0,1
。
其实文件里面有相当多的『空间』存在,并不是完全填满的,而『压缩』的技术就是将这些『空间』填满,以让整个文件占用的容量下降。
『压缩过的文件]并无法直接被操作系统所使用的,因此,若要使用这些被压缩过的文件数据,则必须解压缩』将他『还原』回来未压缩前的模样。
压缩比等于压缩后与压缩的文件所占用的磁盘空间大小的比值。
Linux 系统常见的压缩指令
常见的几个压缩拓展名:
gzip,zcat/zmore/zless/zgrep
gzip 可以解开:compress,zip 与 gzip 等软件所压缩的文件。gzip 所建立的压缩文件为 *.gz。
gzip [-cdtc#] 档名
可以使用 zcat 读取压缩文件
zcat 档名
cat/more/less
可以使用不同的方式来读取纯文本档;
zcat/zmore/zless
则可以对应于 cat/more/less
的方式来读取纯文本档被压缩后的压缩文件;
由于 gzip这个压缩指令主要想要用来取代compress 的,所以不但 compress 的压缩文件案可以使用gzip 来解开,同时 zcat这个指令可以同时读取compress 与gzip 的压缩文件。
egrep可以用来搜寻关键词:从文字压缩文件当中找数据
bzip2,bzcat/bzmore/bzless/bzgrep
bzip2 [-cdkzv#] 档名
bzcat 档名.bz2
bzip2 压缩时间比 gzip 久,压缩率高。
xz,xzcat/xzmore/xzless/xzgrep
xz [-dtlkc#] 档名
xcat 档名.xz
它可以将 gzip压缩比的21% 进一步优化到 15%。时间久。。。。
打包指令:tar
打包与压缩:
tar [-zl-jl-I] [cv] [-f 待建立的新档名] filename...
查看档名:
tar [-zl-jl-I] [tv] [-f 已有档名]
解压缩:
tar [-zl-jl-I] [xv] [-f 已有档名] [-C 目录]
仅解开单一文件:使用 -jtv 找到要的档名,将该档名解开
tar -jtv -f /root/etc.tar.bz2|gep '要的文档名'
## 找到后,解开
tar -jxv -f 压缩包.tar.baz2 待解开的文档名
打包某目录,但不含某些文件:使用 --exclude
tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*
仅备份比某个时刻新的文件:使用 --newer-mtime
tar -jcv -f /root/etc.newer.then.paswd.tar.bz2 --newer-mtime="2015/06/17" /etc/*
tar 打包出来的文件有没有进行压缩所得到文件称呼不同:
如果仅是打包而已,就是[tar -cv -f file.tar
]而已,这个文件我们称呼为 tarfile
;
如果还有进行压缩的支持,例如[tar-jcv -f file.tar.bz2
]时,称呼为 tarball
。
在 tar 的使用中,有一种方式最特殊,那就是透过标准输入输出的数据流重导向(standard input/standard output),以及管线命令(pipe)的方式,将待处理的文件一边打包一边解压缩到目标目录去。
tar -cvf - /etc | tar -xvf -
#这个动作有点像是cp -r /etc /tmp
#要注意的地方在于输出档变成-而输入档也变成-,又有一个Ⅰ存在~
#一这分别代表standard output , standard input与管线命令
#简单的想法中,可以将 – 想成是在内存中的一个装置(缓冲区)。
XFS 文件系统的备份与还原
xfsdump 除了可以进行文件系统的完整备份外,还可以进行累积备份。
累积备份:在第一次使用xfsdump
进行完整备份后,等过一段时间的文件系统自然运作后,再进行第二次xfsdump
时,就可以选择累积备份了,此时新备份的数据只会记录与第一次完整备份所有差异的文件。
第一份备份一定是完整备份,完整备份在 xfsdump 当中被定义为 level 0
。第二次备份时,被定义为 level1
,比较过后,备份有变化的文件。。。
xfsdump 限制:
1.xfsdump 不支援没有挂载的文件系统备份,所以只能备份已挂载的;
2.xfsdump 必须使用root的权限才能操作(涉及文件系统的关系);
3.xfsdump 只能备份XFS 文件系统;
4.xfsdump 备份下来的数据文件或储存媒体)只能让 xfsrestore 解析
5.xfsdump 是透过文件系统的UUID来分辨各个备份档的,因此不能备份两个具有相同UUID 的文件系统
xfsdump [-L S_label] [-M M_label] [-1 #] [-f 备份档] 待备份资料
特别注意,xfsdump 预设仅支持文件系统的备份,并不支持特定目录的备份
所以不能用 xfsdump去 备份/etc,因为 /etc 从来就不是一个独立的文件系统。
xfsrestore文件系统还原
xfsrestore -I
xfsrestore [-f 备份档] [-L S_label] [-s] 待复原目录
xfsrestore [-f 备份文件] -r 待复原目录
xfsrestore [-f 备份文件] -i 待复原目录
光盘写入工具
文本模式的刻录行为:
1.先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 指令来处理;
2.将该映像文件刻录至光盘或 DVD 当中,利用 cdrecord 指令来处理。
mkisofs:建立映像档
mkisofs [-o 映像档] [-Jrv] [-V vol] [-m file] 待备份文件... -graft-point isodir=systemdir ...
光盘的格式一般称为 iso9660
,这种格式一般仅支持旧版的 DOS 档名,亦即档名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在。
如果加上 -r
的选项之后,那么文件信息能够被记录的比较完整,可包括 UID/GID 与权限等等。
一般预设的情况下,所有要被加到映像档中的文件都会被放置到映象文件中的根目录,如此一来可能会造成刻录后的文件分类不易的情况。所以,可以使用-graft-point
这个选项,当你使用这个选项之后,可以定义位于映像文件中的目录。
可透过wodim
来写入CD或DVD 刻录机
其他常见的压缩与备份工具
dd
dd
可以读取磁盘装置的内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个文件。
dd if="input_file" of="output_file" bs="block size" count="number"
默认 dd
是一个一个扇区去读/写的,而且即使没有用到的扇区也会倍写入备份档中。因此这个文件会变得跟原本的磁盘一模一样大。
dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据。
cpio
cpio
可以备份任何东西,包括装置设备文件
cpio -ovcB > [file|device] <=备份
cpio -ivcdu < [file|device] <=还原
cpio -ivct < [file|device] <=察看
cipo 必须要搭配类似 find 指令来读入欲备份的文件名数据
《鸟哥的Linux私房菜-基础篇》学习笔记