可先浏览加粗部分

一、常见压缩档

*.zip | zip 程式壓縮打包的檔案; (很常见,但是因为不包含文件名编码信息,跨平台可能会乱码)

*.rar | winrar 程序压缩打包的档案;(在windows上很常见,但是是商业软件。)

*.gz | gzip 程式壓縮的檔案; (linux目前使用最广泛的压缩格式)

*.bz2 | bzip2 程式壓縮的檔案;

*.xz | xz 程式壓縮的檔案;

*.tar | tar 程式打包的資料,並沒有壓縮過;

*.tar.gz | tar 程式打包的檔案,其中並且經過 gzip 的壓縮 (最常见)

*.tar.bz2 | tar 程式打包的檔案,其中並且經過 bzip2 的壓縮

*.tar.xz | tar 程式打包的檔案,其中並且經過 xz 的壓縮 (新一代压缩选择)

*.7z | 7zip 程式压缩打包的档案。

二、以能否压缩多文件分类

  1. gzip bzip2 xz 这三个压缩格式都只能压缩单个文件。(换而言之,该程序的输入输出都是流,不包含文档树信息。)

    因此如果要用它们压缩多个文件或目录,需要使用另一个软件来先将要压缩的文档打包成一个文件(包含文档树信息),这个命令就是 tar.

    先使用 tar 归档要压缩的多文件,再对生成的 *.tar 使用 上述压缩指令(或者直接使用管道重定向),linux 下是这样实现多文件压缩的。

  2. 而 7z 和 zip,以及 rar 格式,都同时具有了 归档(tar) 和 压缩 两个功能,(也就是该格式包含了文档树信息咯)也就是说它们可以直接压缩多个文件。

三、各格式使用的算法差别

  1. gzip 成熟的格式,使用的算法基于 DEFLATE。(压缩比适中)
  2. 7z 新一代格式,使用的压缩算法可替换,默认是使用的 lzma/lzma2 算法,使用 AES-256 作为加密算法。
  3. xz 同样使用的 lzma/lzma2 算法,不过只能压缩一个文件。(压缩比很高,相对的用时也更多)
  4. zip 同样是支持多种算法的压缩格式,默认应该是使用的 DEFLATE 算法。诞生较早,有很多缺陷。(跨平台乱码、容易被破解等)
  5. rar 使用 类DEFLATE 的专有算法,使用 AES 加密。(rar5.0 以后使用 AES-256CBC)

不过 zip 被广泛应用在 安卓的 apk 格式、java 的 jar、电子书 的 epub,还有github、云硬盘的多文件下载 中,原因嘛大概是zip很流行,所以不用担心目标平台没解压软件吧。

拓展:无损压缩算法中,除了现在常用的 lzma/lzma2/deflate 这种通用算法外,最近又涌现出一些专用算法,在 web 上应用的较多。

而在音频、视频、图片领域,通常使用的是有损压缩算法。

四、如何选用压缩方案

  1. tar.gz 在 linux 上最常见,在压缩率和压缩时间上拥有良好的平衡。如果有任何疑惑,就选用它吧,不会错。
  2. tar.xz 是新一代的压缩格式,虽然拥有更好的压缩率,压缩/解压速度相对要慢很多倍。一般在电脑性能足够好的时候,可选用它。
  3. 7z 和 xz 同为新一代压缩格式,它更复杂,支持多文件压缩。而且更适合跨平台,推荐使用。
  4. zip 因为跨平台容易导致文件名乱码,不建议使用。(虽然有这样的缺陷,但是却意外的用得很广泛,在前一节有说过)
  5. rar 性能不差,但是是商业格式,不开源,不建议使用。(做得比较好的是它的 recovery records,在网络环境不好,容易导致包损坏时,这个功能就特别棒
  6. tar.bz2 算是 linux 压缩历史上,过渡时期的产物,性能也介于 gz 和 xz 之间,一般来说不需要考虑它。

总的来说,就是 windows 上推荐使用 7z,而 linux 上 推荐使用 tar.gz tar.xz 7z 之一。此外 rar 的损坏很容易修复,zip 受众多(要注意乱码问题),也可以考虑。

五、Linux 上的压缩相关指令

1. tar 指令

通过之前的介绍,可以看出常用的就是 tar gzip xz 等,如果要压缩多个文件,需要先使用tar,再用管道重定向到 gzip 或 xz,比较麻烦,而这几个指令又很常用。于是后来对tar做了增强。

tar 最初只是一个归档程序,而压缩则由其他的压缩软件来完成(一个程序只干一件事)。后来为了方便,丧心病狂地集成了各种压缩指令。因此这里就只介绍这一个命令了(它囊括了所有)。

tar 的選項與參數非常的多!我們只講幾個常用的選項,更多選項您可以自行 man tar 查詢囉!

[dmtsai@study ~]$ tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包與壓縮

[dmtsai@study ~]$ tar [-z|-j|-J] [tv] [-f 既有的 tar檔名] <==察看檔名

[dmtsai@study ~]$ 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 -zcv -f filename.tar.gz 要被壓縮的檔案或目錄名稱

查看文档树:tar -ztv -f filename.tar.gz

解壓縮:tar -zxv -f filename.tar.gz -C 欲解壓縮的目錄

上面的命令需要根据压缩格式的不同,选用 -z -j -J 选项,而实际上文档的后缀就已经表明了它的压缩格式,不免让人觉得多余。

因此就有这么一条通用的压缩/解压 option

-a, --auto-compress

Use archive suffix to determine the compression program.

使用这个,便有了通用的解压指令

tar -axv -f file.tar.* (它适用于上述三种压缩格式)

仅解压指定的文件
  1. 先查看文档树找到需要解压的文件的文件名
  2. tar -zxv -f 打包檔.tar.gz 待解開檔名
打包某目錄,但不含該目錄下的某些檔案之作法

使用 --exclude=FILE 选项(支持文件名的模式匹配,而且可重复)

tar -zcv -f filename.tar.gz directory --exclude=FILE1 --exclude=func*

只打包目录中比指定时刻更新的文档

使用 --newer-mtime="2015/06/17" 选项。

tarfile, tarball

tarfile 纯打包、未压缩的 tar 文件

tarball 压缩了的 tar 文件

2. zip格式(linux 一般也会自带,详细的请man)

  1. 压缩:zip

    • 压缩目录:zip -r filename.zip directory (r 表示递归压缩,压缩包会包含这个目录)
  2. 解压:unzip
    • 解压到某目录:unzip -d directory filename.zip (-d dir 表示将内容解压到dir目录内)

      • -t 测试压缩档的完整性
      • -x filename 排除某文件

3. 7z格式(需要p7zip,deepin自带,更多的请man)

  1. 查看目录树:7z l file.7z (List contents of archive)
  2. 压缩:7z a file.7z file1 directory1 (a 为创建压缩档或向压缩档中添加文件/目录,一次可指定多个要压缩的文件或目录)
  3. 解压:7z x file.7z -o directory (解压到指定目录)
  4. 测试完整性: 7z t file.7z

p7zip安装好后,会提供7z、7za、7zr三个指令,一般来说直接用7z就行。

P.S. 7z不会保存 linux 文件的用户、用户组信息,因此不能直接用于linux系统备份,此时建议用tar.xz或tar.7z(也就是先用tar打包)

4. rar格式(还是那句话,更多的请man)

rar是非开源的格式,linux 默认是不会包含 rar 压缩软件的,但是它的解压软件是开源的,deepin 自带 unrar,顺便7zip也可解压 rar 文档。

若想用linux创建rar压缩档,需要从rarlab上下载linux版,(deepin源自带)不过要注意的是该linux版是40天试用版,要长期使用的话,可能需要破解。(rar的key网上一搜一大把)

  1. 压缩:rar a file.rar file (这个是试用的)
  2. 解压:unrar x file.rar (这个开源免费)

其实我挺中意rar的修复功能的,不知道为啥 7z xz 这样的新格式没有添加类似的 recorvery records。上次下个 Idea 的 tarball,下了四五次才下到一个完整的,要是用 rar 的话,大概一键修复就好了,可 tar.gz 我不知道怎么修复,只好一遍遍重复下载。。

六、参考

本文允许转载,转载请注明出处:常见压缩格式分析,及 Linux 下的压缩相关指令

常见压缩格式分析,及 Linux 下的压缩相关指令的更多相关文章

  1. Linux下的压缩zip,解压缩unzip命令详解及实例

    实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip ====================== ...

  2. Linux下的压缩解压缩命令详解

    linux zip命令zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzipunzip -o - ...

  3. Linux下的压缩zip,解压缩unzip命令具体解释及实例

    实例:压缩server上当前文件夹的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前文件夹 unzip filename.zip ================= ...

  4. Linux下的压缩解压缩命令详解及实例

    实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip ====================== ...

  5. Linux下的压缩解压缩

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进  行压缩了,所以首先就来讲讲t ...

  6. linux下关于压缩、解压相关的操作

    本文转自: http://alex09.iteye.com/blog/647128 很不错的linux下关于压缩.解压相关的操作,适合于linux初学者.   .tar  解包:tar xvf Fil ...

  7. linux下文件压缩与解压操作

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...

  8. Linux下的压缩文件剖析 (tar/gzip的区别)

    Linux下的压缩文件剖析 对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是, ...

  9. Linux下的压缩(zip)解压(unzip)缩命令

      .zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip命令 unzip -o ...

随机推荐

  1. Java面向对象之封装 入门实例(一)

    一.基础概念 (一)面向对象的三大特征:      1.封装         2.继承          3.多态 (二)封装:隐藏实现细节,对外提供公共的访问方式(接口). 封装的体现之一:将属性都 ...

  2. 04、NetCore2.0下Web应用之Startup源码解析

    04.NetCore2.0Web应用之Startup源码解析   通过分析Asp.Net Core 2.0的Startup部分源码,来理解插件框架的运行机制,以及掌握Startup注册的最优姿势. - ...

  3. ajax处理跨域有几种方式

    一.什么是跨域 同源策略是由Netscape提出的著名安全策略,是浏览器最核心.基本的安全功能,它限制了一个源(origin)中加载文本或者脚本与来自其他源(origin)中资源的交互方式,所谓的同源 ...

  4. 浅析Java的Frok/Join框架

    一丶Fork/Join框架产生背景: 随着并发需求的不断提高和硬件的不断发展,程序并行执行仿佛就提上日程上来了,伟大的毛主席就说过:"人多力量大",所以如果一件事可以分配给多个人同 ...

  5. hue上配置HA的hdfs文件(注意,HA集群必须这样来配置才能访问hdfs文件系统)

    按照正常方式配置,发现无论如何也访问不了hdfs文件系统,因为我们是HA的集群,所以不能按照如下配置 将其改为 除此之外,还需要配置hdfs文件的 接着要去hadoop的目录下启动httpfs.sh ...

  6. Random Forest vs GradientBoostingDecisionTree

    相同 随机森林和GBDT都属于集成算法,base model都是决策树. 不同 随机森林 随机森林是决策树的bagging. bagging通过重复对原训练数据集上进行有放回地采样生成的数据集用bas ...

  7. LoadRunner菜鸟入门学习笔记

    一.LR版本及浏览器选择 1.首先百度了一下LR各版本的浏览器兼容性 8.0 最高ie6 8.1 最高ie6 9.0 最高ie7 9.5 最高ie8 11.0 最高ie9( win7 32位+LR11 ...

  8. [JSOI2007]祖码Zuma

    题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...

  9. Codeforces Round #407 (Div. 1)

    人傻不会B 写了C正解结果因为数组开小最后RE了 疯狂掉分 AC:A Rank:392 Rating: 2191-92->2099 A. Functions again 题目大意:给定一个长度为 ...

  10. 【USACO】电子游戏 有条件的背包

    题目描述 翰的奶牛玩游戏成瘾!本来约翰是想把她们拖去电击治疗的,但是他发现奶牛们在玩游戏后生产 了更多的牛奶,也就支持它们了. 但是,奶牛在选择游戏平台上的分歧很大:有些奶牛想买 Xbox 360 来 ...