zoukankan      html  css  js  c++  java
  • 5,linux入门到上手-文件与文件系统的压缩,打包与备份

    文件与文件系统的压缩,打包与备份

    0x01、常见的压缩文件扩展名

    *.Z					compress 程序压缩的文件; 
    *.zip				zip	程序压缩的文件; 
    *.gz				gzip 程序压缩的文件; 
    *.bz2				bzip2 程序压缩的文件; 
    *.xz				xz	程序压缩的文件; 
    *.tar				tar	程序打包的数据,并没有压缩过; 
    *.tar.gz			tar	程序打包的文件,其中并且经过gzip的压缩 
    *.tar.bz2			tar	程序打包的文件,其中并且经过bzip2的压缩 
    *.tar.xz			tar	程序打包的文件,其中并且经过xz的压缩
    

    ox02、Linux系统常见的压缩指令

    1、gzip,zcat/zmore/zless/zgrep

    gzip可以说是应用度最广的压缩指令了!目前gzip可以解开compress,zip与gzip等软件所 压缩的文件。至于 gzip所创建的压缩文件为*.gz的文件名喔!让我们来看看这个指令的语 法吧:

    当你使用gzip进行压缩时,在默认的状态下原本的文件会被压缩成为.gz的文件名,原始文 件就不再存在了。

    范例四的重点在那个-c与 >的使用啰!-c可以将原本要转成压缩文件的数据内容,将它变成文字类型从屏幕输出,然 后我们可以通过大于(>)这个符号,将原本应该由屏幕输出的数据,转成输出到文件而不 是屏幕,所以就能够创建出压缩挡了。

    cat/more/less可以使用不同的方式来读取纯文本文件,那个zcat/zmore/zless则可以对应于 cat/more/less的方式来读取纯文本文件被压缩后的压缩文件!由于gzip这个压缩指令主要想 要用来取代compress的,所以不但compress的压缩文件可以使用gzip来解开,同时zcat 这个指令可以同时读取compress与gzip的压缩文件呦!

    另外,如果你还想要从文字压缩文件当中找数据的话,可以通过zgrep来搜寻关键字喔!而不需要将压缩文件解开才以grep进行!这对查询备份中的文本文件数据相当有用!

    时至今日,应该也没有人爱用compress这个老老的指令了!~而如果你还有备份数据使用的是compress创建出来的.Z文件,那也无须担心,使用znew可以将该文件转成gzip的格示喔!

    2、bzip2,bzcat/bzmore/bzless/bzgrep

    若说gzip是为了取代compress并提供更好的压缩比而成立的,那么bzip2则是为了取代 gzip并提供更佳的压缩比而来的。bzip2真是很不错用的东西~这玩意的压缩比竟然比gzip 还要好~至于bzip2的用法几乎与gzip相同!看看下面的用法吧:

    看上面的范例,你会发现到bzip2连选项与参数都跟gzip一模一样!只是扩展名由.gz变成 .bz2而已!其他的用法都大同小异!你也可以发现到bzip2的压 缩率确实比gzip要好些!不过,对于大容量文件来说,bzip2压缩时间会花比较久喔!至少比gzip要久的多!这没办法~要有更多可用容量,就得要花费相对应的时间!

    3、xz,xzcat/xzmore/xzless/xzgrep

    虽然bzip2已经具有很棒的压缩比,不过显然某些自由软件开发者还不满足,因此后来还推出了xz这个压缩比更高的软件!这个软件的用法也跟gzip/bzip2几乎一模一样!那我们就来瞧一瞧

    虽然xz这个压缩比真的好太多太多了!以这个services文件为范例,他可以将 gzip压缩比(压缩后/压缩前)的21%更进一步优化到15%耶!差非常非常多!不过,xz 最大的问题是...时间花太久了!如果你曾经使用过xz的话,应该会有发现,他的运算时间真的比gzip久很多喔!

    通过“time [gzip|bzip2|xz] -c services > services.[gz|bz2|xz]”去执行运算 结果,结果发现这三个指令的执行时间依序是:0.019s, 0.042s, 0.261s,看最后一个数字! 差了10倍的时间耶!所以,如果你并不觉得时间是你的成本考虑,那么使用xz会比较好! 如果时间是你的重要成本,那么gzip恐怕是比较适合的压缩软件喔!

    0x03 打包指令: tar

    虽然gzip,bzip2,xz也能够针对目录 来进行压缩,不过,这两个指令对目录的压缩指的是“将目录内的所有文件"分别"进行压 缩”的动作!而不像在Windows的系统,可以使用类似WinRAR这一类的压缩软件来将好多数据“包成一个文件”的样式。

    这种将多个文件或目录包成一个大文件的指令功能,我们可以称呼他是一种“打包指令”啦! 那Linux有没有这种打包指令呢?是有的!那就是鼎鼎大名的tar这个玩意儿了!tar可以将 多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2/xz的支持,将该文件同时进 行压缩!更有趣的是,由于tar的使用太广泛了,目前Windows的WinRAR也支持.tar.gz 文件名的解压缩呢!很不错吧!所以下面我们就来玩一玩这个咚咚!

    1、tar

    其实最简单的使用tar就只要记忆下面的方式即可:

    • 压 缩:tar -j <u> c </u> v -f filename.tar.bz2要被压缩的文件或目录名称
    • 查 询:tar -j <u> t </u> v -f filename.tar.bz2
    • 解压缩:tar -j <u> x </u> v -f filename.tar.bz2 -C欲解压缩的目录

    [注意]:

    另外,由于“-f filename”是紧接在一起的,过去很多文章常会写成“-jcvf filename”,这样是对 的,但由于选项的顺序理论上是可以变换的,所以很多读者会误认为“-jvfc filename”也可以~ 事实上这样会导致产生的文件名变成c!因为-fc嘛!所以啰,建议您在学习tar时,将“-f filename”与其他选项独立出来,会比较不容易发生问题。

    实例1:使用tar加入-z,-j或-J的参数备份/etc/目录

    实例2:查阅tar文件的数据内容(可察看文件名),与备份文件名有否根目录的意义

    要察看由tar所创建的打包文件内部的文件名非常的简单!可以这样做:

    如果加上-v这个选项时,详细的文件权限/属性都会被列出来!如果只是想要知道文件名而 已,那么就将-v拿掉即可。

    从上面的数据我们可以发现一件很有趣的事情,那就是每个文件 名都没了根目录了!这也是上一个练习中出现的那个警告讯息“tar: Removing leading /' from member names(移除了文件名开头的/')”所告知的情况!
    那为什么要拿掉根目录呢?主要是为了安全!我们使用 tar 备份的数据可能会需要解压缩回来使用,在tar所记录的文件名(就是我们刚刚使用tar -jtvf所察看到的文件名)那就是解压 缩后的实际文件名。如果拿掉了根目录,假设你将备份数据在/tmp解开,那么解压缩的文件 名就会变成“/tmp/<u>etc/xxx</u>”。但“如果没有拿掉根目录,解压缩后的文件名就会是绝对 路径,亦即解压缩后的数据一定会被放置到<u>/etc/xxx</u>去!”如此一来,你的原本的 /etc/下面的数据,就会被备份数据所覆盖过去了!

    如果你确定你就是需要备份根目录到tar的文件中,那可以使用-P(大写)这个选项,请看 下面的例子分析:

    范例:将文件名中的(根)目录也备份下来,并察看一下备份文件的内容文件名
    [root@study	~]# tar -jpPcv -f etc.and.root.tar.bz2 /etc
    [root@study	~]# tar -jtf etc.and.root.tar.bz2
    /etc/locale.conf 
    /etc/hostname 
    /etc/aliases.db 
    #这次查阅文件名不含-v选项,所以仅有文件名而已!没有详细属性/权限等参数。
    

    有发现不同点了吧?如果加上-P选项,那么文件名内的根目录就会存在喔!不过,个人 建议,还是不要加上-P这个选项来备份!毕竟很多时候,我们备份是为了要未来追踪问题用 的,倒不一定需要还原回原本的系统中!所以拿掉根目录后,备份数据的应用会比较有弹性!也比较安全呢!

    • 实例三:将备份的数据解压缩,并考虑特定目录的解压缩动作(-C选项的应用)

    可以使用-C选项解压到指定目录:

    • 实例四:仅解开单一文件的方法

    刚刚上头我们解压缩都是将整个打包文件的内容全部解开!想像一个情况,如果我只想要解 开打包文件内的其中一个文件而已,那该如何做呢?很简单的,你只要使用-jtv找到你要的 文件名,然后将该文件名解开即可。我们用下面的例子来说明一下:

    • 实例五:打包某目录,但不含该目录下的某些文件之作法

    • 实例六:仅备份比某个时刻还要新的文件

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/v01cano/p/11738806.html
Copyright © 2011-2022 走看看