• 文件与文件系统的压缩


      由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 ,其实在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!于是就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小!这就是压缩的技术!

      另外一种压缩技术,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『111....』共有 100 个 1 时, 那么压缩技术会记录为『100 个 1』而不是真的有 100 个 1 的位存在!这样也能够精简文件记录的容量。

    Linux 系统常见的压缩指令

    gzip

    • gzip [-cdtv#] 檔名
    • [dmtsai@study ~]$ zcat 檔名.gz
    • 选项与参数:
      • -c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
      • -d :解压缩的参数;
      • -t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
      • -v :可以显示出原文件/压缩文件案的压缩比等信息;
      • -# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6

    bzip2

    • bzip2 [-cdkzv#] 檔名
    • [dmtsai@study ~]$ bzcat 檔名.bz2
    • 选项与参数:
      • -c :将压缩的过程产生的数据输出到屏幕上!
      • -d :解压缩的参数
      • -k :保留源文件,而不会删除原始的文件喔!
      • -z :压缩的参数 (默认值,可以不加)
      • -v :可以显示出原文件/压缩文件案的压缩比等信息;
      • -# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

    xz

    • xz [-dtlkc#] 檔名
    • [dmtsai@study ~]$ xcat 檔名.xz
    • 选项与参数:
      • -d :就是解压缩啊!
      • -t :测试压缩文件的完整性,看有没有错误
      • -l :列出压缩文件的相关信息
      • -k :保留原本的文件不删除~
      • -c :同样的,就是将数据由屏幕上输出的意思!
      • -# :同样的,也有较佳的压缩比的意思!

    打包指令: tar

    • 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 就只要记忆底下的方式即可:

    • 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
    • 查 询:tar -jtv -f filename.tar.bz2
    • 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

    文件系统的备份与还原

    XFS 文件系统备份 xfsdump

    • xfsdump 不支援没有挂载的文件系统备份!所以只能备份已挂载的!

    • xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)

    • xfsdump 只能备份 XFS 文件系统!

    • xfsdump 备份下来的数据 (文件或储存媒体) 只能让 xfsrestore 解析;

    • xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统。

    • xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份档] 待备份资料

    • 选项与参数:

      • -L :xfsdump 会纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
      • -M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
      • -l :是 L 的小写,就是指定等级~有 0~9 共 10 个等级喔! (预设为 0,即完整备份)
      • -f :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 装置文件名或其他一般文件档名等
      • -I :从 /var/lib/xfsdump/inventory 列出目前备份的信息状态。

    XFS 文件系统还原 xfsrestore

    • xfsrestore [-f 备份档] [-L S_label] [-s] 待复原目录 <==单一文件全系统复原
    • xfsrestore [-f 备份文件] -r 待复原目录 <==透过累积备份文件来复原
      系统
    • xfsrestore [-f 备份文件] -i 待复原目录 <==进入互动模式
      -选项与参数:
      • -I :跟 xfsdump 相同的输出!可查询备份数据,包括 Label 名称与备份时间等
      • -f :后面接的就是备份档!企业界很有可能会接 /dev/st0 等磁带机!我们这里接档名!
      • -L :就是 Session 的 Label name 喔!可用 -I 查询到的数据,在这个选项后输入!
      • -s :需要接某特定目录,亦即仅复原某一个文件或目录之意!
      • -r :如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,
        需要这东西来达成累积复原
      • -i :进入互动模式,进阶管理员使用的!一般我们不太需要操作它!

    光盘写入工具

    mkisofs:建立映像档

    • mkisofs [-o 映像档] [-Jrv] [-V vol] [-m file] 待备份文件...
    • > -graft-point isodir=systemdir ...
    • 选项与参数:
      • -o :后面接你想要产生的那个映像档档名。
      • -J :产生较兼容于 windows 机器的文件名结构,可增加文件名长度到 64 个 unicode 字符
      • -r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的信息(如 UID/GID 等) ;
      • -v :显示建置 ISO 文件的过程
      • -V vol :建立 Volume,有点像 Windows 在文件总管内看到的 CD title 的东西
      • -m file :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中,也能使用 * 通配符喔
      • -graft-point:graft 有转嫁或移植的意思,相关资料在底下文章内说明。

    cdrecord:光盘刻录工具

    • wodim --devices dev=/dev/sr0... <==查询刻录机的 BUS 位置

    • wodim -v dev=/dev/sr0 blank=[fast|all] <==抹除重复读写片

    • wodim -v dev=/dev/sr0 -format <==格式化 DVD+RW

    • wodim -v dev=/dev/sr0 [可用选项功能] file.iso
      -选项与参数:

      • --devices :用在扫瞄磁盘总线并找出可用的刻录机,后续的装置为 ATA 接口
      • -v :在 cdrecord 运作的过程中,显示过程而已。dev=/dev/sr0 :可以找出此光驱的 bus 地址,非常重要!blank=[fast|all]:blank 为抹除可重复写入的 CD/DVD-RW,使用 fast 较快,all 较完整
      • -format :对光盘片进行格式化,但是仅针对 DVD+RW 这种格式的 DVD 而已;
    • [可用选项功能] 主要是写入 CD/DVD 时可使用的选项,常见的选项包括有:

      • -data :指定后面的文件以数据格式写入,不是以 CD 音轨(-audio)方式写入! speed=X :指定刻录速度,例如 CD 可用 speed=40 为 40 倍数,DVD 则可用 speed=4 之类
      • -eject :指定刻录完毕后自动退出光盘 fs=Ym :指定多少缓冲存储器,可用在将映像档先暂存至缓冲存储器。预设为 4m, 一般建议可增加到 8m ,不过,还是得视你的刻录机而定。
    • 针对 DVD 的选项功能:

      • driveropts=burnfree :打开 Buffer Underrun Free 模式的写入功能
      • -sao :支持 DVD-RW 的格式

    其他常见的压缩与备份工具

    dd

    • 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 -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 方式储存

    重点回顾

    • 压缩指令为透过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘容量。 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为是『压缩比』
    • 压缩的好处是可以减少磁盘容量的浪费,在 WWW 网站也可以利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升。
    • 压缩文件案的扩展名大多是:『*.gz, *.bz2, *.xz, *.tar, *.tar.gz, *.tar.bz2, *.tar.xz』
    • 常见的压缩指令有 gzip, bzip2, xz。压缩率最佳的是 xz,若可以不计时间成本,建议使用 xz 进行压缩。
    • tar 可以用来进行文件打包,并可支持 gzip, bzip2, xz 的压缩。
    • 压 缩:tar -Jcv -f filename.tar.xz 要被压缩的文件或目录名称
    • 查 询:tar -Jtv -f filename.tar.xz
    • 解压缩:tar -Jxv -f filename.tar.xz -C 欲解压缩的目录
    • xfsdump 指令可备份文件系统或单一目录
    • xfsdump 的备份若针对文件系统时,可进行 0-9 的 level 差异备份!其中 level 0 为完整备份;
    • xfsrestore 指令可还原被 xfsdump 建置的备份档;
    • 要建立光盘刻录数据时,可透过 mkisofs 指令来建置;
    • 可透过 wodim 来写入 CD 或 DVD 刻录机
    • dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据
    • cpio 为相当优秀的备份指令,不过必须要搭配类似 find 指令来读入欲备份的文件名数据,方可进行备份动作。
  • 相关阅读:
    互操作
    Rx基础
    数据流块基础
    C# 一个帮您理解回调函数的例子(新手必看)
    C# 多线程之通过Timer开启线程的例子
    C# 利用委托事件进行窗体间的传值(新手必看)
    C#XML文件操作随笔
    C# 委托学习笔记
    c# 关于抓取网页源码后中文显示乱码的原因分析和解决方法
    c# 异步编程 使用回调函数例子
  • 原文地址:https://www.cnblogs.com/chengmf/p/12636398.html
Copyright © 2020-2023  润新知