压缩文件的用途与技术
如果我们记录数字1,计算机使用二进制,1会在最右边占据1个 bit,而其他的7个 bits 将会自动的被填上0,那7个bits应该是『空的』才对,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录,将这些没有使用到的空间『丢』出来,以让文件占用的空间变小,这就是压缩的技术
『压缩过的文件』无法直接被使用,必须将他『还原』回来未压缩前的模样才能使用,这就是『解压缩』,而压缩后与压缩的文件所占用的磁盘空间大小,被称为是『压缩比』
Linux 系统常见的压缩指令
几个常见的压缩文件案扩展名:
*.Z compress 程序压缩的文件;
*.zip zip 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.bz2 bzip2 程序压缩的文件;
*.xz xz 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
*.tar.xz tar 程序打包的文件,其中并且经过 xz 的压缩
Linux上常见的压缩指令就是 gzip, bzip2以及最新的xz。gzip是由GNU计划所开发出来的压缩指令,该指令已经取代了compress。后来GNU又开发出 bzip2 及 xz 这几个压缩比更好的压缩指令。压缩指令通常仅能针对一个文件来压缩与解压缩,而tar可以将很多文件『打包』成为一个文件,也可以打包目录。后来,GNU计划中,将整个tar与压缩的功能结合在一起。
gzip, zcat/zmore/zless/zgrep
gzip可以解开compress, zip与gzip等软件所压缩的文件
$ gzip [-cdtv#] 文件名
$ zcat 文件名.gz
选项与参数:
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
当你使用 gzip 进行压缩时,在默认的状态下原本的文件会被压缩成为.gz 的文件名,源文件就不再存在
cat/more/less 可以使用不同的方式来读取纯文本档,那个 zcat/zmore/zless 则可以对应于 cat/more/less 的方式来读取纯文本档被压缩后的压缩文件,可以通过 zgrep 来搜寻关键词
bzip2, bzcat/bzmore/bzless/bzgrep
bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的
$ bzip2 [-cdkzv#] 文件名
$ bzcat 文件名.bz2
选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留源文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快
xz, xzcat/xzmore/xzless/xzgrep
后来还推出了 xz 这个压缩比更高的软件
$ xz [-dtlkc#] 文件名
$ xcat 文件名.xz
选项与参数:
-d :就是解压缩啊!
-t :测试压缩文件的完整性,看有没有错误
-l :列出压缩文件的相关信息
-k :保留原本的文件不删除
-c :同样的,就是将数据由屏幕上输出的意思
-# :同样的,也有较佳的压缩比的意思
xz 最大的问题是时间太长,使用xz 的运算时间比 gzip长很多
打包指令: tar
tar 可以将多个目录或文件打包成一个大文件,同时还可以通过 gzip/bzip2/xz 的支持,将该文件同时进行压缩
$ tar [-z|-j|-J] [cv] [-f 待建立的新文件名] filename... <==打包与压缩 $ tar [-z|-j|-J] [tv] [-f 既有的 tar文件名] <==查看文件名 $ tar [-z|-j|-J] [xv] [-f 既有的 tar文件名] [-C 目录] <==解压缩 选项与参数: -c :建立打包文件,可搭配 -v 来查看过程中被打包的文件名(filename) -t :查看打包文件的内容含有哪些文件名,重点在查看『文件名』就是了; -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开 特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。 -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2 -J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz 特别留意, -z, -j, -J 不可以同时出现在一串指令列中 -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来! -f filename:-f 后面要立刻接要被处理的文件名!建议-f单独写一个选项 -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍: -p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件 -P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意; --exclude=FILE:在压缩的过程中,不要将 FILE 打包! |
最简单的使用 tar 的方式:
其他常见的压缩与备份工具
dd
dd 可以读取磁盘设备的内容(几乎是直接读取扇区"sector"),然后将整个设备备份成一个文件
# dd if="input_file" of="output_file" bs="block_size" count="number"
选项与参数:
if :就是 input file也可以是设备
of :就是 output file 也可以是设备;
bs :规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小)
count:多少个 bs 的意思
cpio
cpio 可以备份任何东西,包括设备文件
# cpio -ovcB > [file|device] <==备份
# cpio -ivcdu < [file|device] <==还原
# cpio -ivct < [file|device] <==查看
备份会使用到的选项与参数:
-o :将数据 copy 输出到文件或设备上
-B :让默认的 Blocks 可以增加至 5120 bytes ,默认是 512 bytes
-i :将数据自文件或设备 copy 出来系统当中
-d :自动建立目录!使用 cpio 所备份的数据内容不见得会在同一层目录中,因此我们必须要让 cpio 在还原时可以建立新目录,此时就得要 -d 选项的帮助!
-u :自动的将较新的文件覆盖较旧的文件!
-t :需配合 -i 选项,可用在"查看"以 cpio 建立的文件或设备的内容
一些可共享的选项与参数:
-v :让储存的过程中文件名可以在屏幕上显示
-c :一种较新的 portable format 方式储存
参考文档:
《鸟哥的Linux私房菜基础篇第三版》