9 文件与文件系统的压缩与打包

常见的压缩文件扩展名:
  • *.Z               compress 程序压缩的文件;
  • *.gz             gzip 程序压缩的文件;
  • *.bz2           bzip2 程序压缩的文件;
  • *.tar             tar 程序打包的数据,并没有压缩过;
  • *.tar.gz        tar 程序打包的文件,其中并且经过 gzip 的压缩
  • *.tar.bz2      tar 程序打包的文件,其中并且经过 bzip2 的压缩
gzip [-cdtv#] 文件名
zcat 档名.gz    :可以读取 compress  or  gzip 的压缩文件。
选项与参数:
-c  :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d  :解压缩的参数;
-t  :可以用来检验一个压缩档的一致性,看看文件有无错误;
-v  :可以显示出原文件/压缩文件的压缩比等资讯;
-#  :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
e.g. 用最佳的压缩比压缩man.config,并保留原本的文件:
gzip -9 -c man.config > man.config.gz

bzip2 [-cdkzv#] 文件名
bzcat 档名.bz2          e.g. bzcat man.config.bz2 来读取数据而不需要解开!
选项与参数:
-c  :将压缩的过程产生的数据输出到屏幕上!
-d  :解压缩的参数
-k  :保留原始文件,而不会删除原始的文件!
-z  :压缩的参数
-v  :可以显示出原文件/压缩文件的压缩比等资讯;
-#  :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!


打包:

tar 可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2 的支持,将该文件同时进行压缩!
tar [-j|-z] [cv] [-f 创建的档名] filename... <==打包与压缩
tar [-j|-z] [tv] [-f 创建的档名]                  <==查看文件名
tar [-j|-z] [xv] [-f 创建的档名] [-C 目录]   <==解压缩
选项与参数:
-c  :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t  :查看打包文件的内容含有哪些文件名,重点在察看『文件名』就是了;
-x  :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
        特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。
-j  :透过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
-z  :透过 gzip  的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
-v  :在压缩/解压缩的过程中,将正在处理的档名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项!
-C 目录    :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-p  :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P  :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!
常用:
  1. 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
  2. 查 询:tar -jtv -f filename.tar.bz2
  3. 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

说明:

如果是 -j 选项,代表有 bzip2 的支持,因此文件名最好就取为 *.tar.bz2 ,因为 bzip2 会产生 .bz2 的扩展名之故! 至于如果是加上了 -z 的 gzip 的支持,那文件名最好取为 *.tar.gz 。


仅解开单一文件的方法:

  1. 先找到我们要的文件名,假设解开 shadow 文件好了:tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
  2. 将该文件解开!语法与实际作法:tar -jxv -f 打包档.tar.bz2 待解开档名  tar -jxv -f /root/etc.tar.bz2 etc/shadow


完整备份工具:dump
dump [-Suvj] [-level] [-f 备份文件] 待备份数据
dump -W
选项与参数:
-S    :仅列出后面的待备份数据需要多少磁碟空间才能够备份完毕;
-u    :将这次 dump 的时间记录到 /etc/dumpdates 文件中;
-v    :将 dump 的文件过程显示出来;
-j    :加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为 2
-level:就是我们谈到的等级,从 -0 ~ -9 共十个等级;
-f    :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 装置档名等
-W    :列出在 /etc/fstab 里面的具有 dump 配置的 partition 是否有备份过?

命令行模式下的烧录行为要怎么处理呢?通常的作法是这样的:

  1. 将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 命令来处理;
  2. 将该映像档烧录至光盘或 DVD 当中,利用 cdrecord 命令来处理。
mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] \
>  -graft-point isodir=systemdir ...
选项与参数:
-o :后面接你想要产生的那个映像档档名。
-r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的资讯;
-v :显示建置 ISO 文件的过程
-m file :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中
-V vol  :创建 Volume,有点像 Windows 在文件总管内看到的 CD title 的东西
-graft-point:graft有转嫁或移植的意思。
e.g.
 mkisofs -r -V 'linux_file' -o /tmp/system.img \
>  -m /home/lost+found -graft-point /root=/root /home=/home /etc=/etc

cdrecord:光盘烧录工具


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 的意思。
e.g.将 /etc/passwd 备份到 /tmp/passwd.back 当中:dd if=/etc/passwd of=/tmp/passwd.back

tar 可以用来备份关键数据,而 dd 则可以用来备份整颗 partition 或 整颗 disk 。 由于需要复制 boot sector 的区块,所以使用 cp 或者是 tar 这种命令是无法达成需求的, 此时那个 dd 就派的上用场了。你可以这样做:dd 可以将原本旧的 partition 上面,将 sector 表面的数据整个复制过来! 当然连同 superblock, boot  sector, meta data 等等通通也会复制过来! 未来你想要建置两颗一模一样的磁碟时, 只要下达类似: dd if=/dev/sda of=/dev/sdb ,就能够让两颗磁碟一模一样,甚至 /dev/sdb 不需要分割与格式化, 因为该命令可以将 /dev/sda 内的所有数据,包括 MBR 与 partition  table 也复制到 /dev/sdb 。

cpio 得要配合类似 find 等可以找到档名的命令来告知 cpio 该被备份的数据在哪里! 
cpio -ovcB  > [file|device] <==备份
cpio -ivcdu < [file|device] <==还原
cpio -ivct  < [file|device]  <==查看
备份会使用到的选项与参数:
  -o :将数据 copy 输出到文件或装置上 
  -B :让默认的 Blocks 可以添加至 5120 bytes ,默认是 512 bytes ! 这样的好处是可以让大文件的储存速度加快(请参考 i-nodes 的观念) 
还原会使用到的选项与参数:
  -i :将数据自文件或装置 copy 出来系统当中 
  -d :自动创建目录!使用 cpio 所备份的数据内容不见得会在同一层目录中,因此我们必须要让 cpio 在还原时可以创建新目录,此时就得要 -d 选项的帮助!
  -u :自动的将较新的文件覆盖较旧的文件!
  -t :需配合 -i 选项,可用在"察看"以 cpio 创建的文件或装置的内容 
一些可共享的选项与参数:
  -v :让储存的过程中文件名称可以在萤幕上显示 
  -c :一种较新的 portable format 方式储存 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值