常见压缩格式分析,及 Linux 下的压缩相关指令
可先浏览加粗部分
一、常见压缩档
*.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 程式压缩打包的档案。
二、以能否压缩多文件分类
gzip bzip2 xz 这三个压缩格式都只能压缩单个文件。(换而言之,该程序的输入输出都是流,不包含文档树信息。)
因此如果要用它们压缩多个文件或目录,需要使用另一个软件来先将要压缩的文档打包成一个文件(包含文档树信息),这个命令就是 tar.
先使用 tar 归档要压缩的多文件,再对生成的 *.tar 使用 上述压缩指令(或者直接使用管道重定向),linux 下是这样实现多文件压缩的。而 7z 和 zip,以及 rar 格式,都同时具有了 归档(tar) 和 压缩 两个功能,(也就是该格式包含了文档树信息咯)也就是说它们可以直接压缩多个文件。
三、各格式使用的算法差别
- gzip 成熟的格式,使用的算法基于 DEFLATE。(压缩比适中)
- 7z 新一代格式,使用的压缩算法可替换,默认是使用的 lzma/lzma2 算法,使用 AES-256 作为加密算法。
- xz 同样使用的 lzma/lzma2 算法,不过只能压缩一个文件。(压缩比很高,相对的用时也更多)
- zip 同样是支持多种算法的压缩格式,默认应该是使用的 DEFLATE 算法。诞生较早,有很多缺陷。(跨平台乱码、容易被破解等)
- rar 使用 类DEFLATE 的专有算法,使用 AES 加密。(rar5.0 以后使用 AES-256CBC)
不过 zip 被广泛应用在 安卓的 apk 格式、java 的 jar、电子书 的 epub,还有github、云硬盘的多文件下载 中,原因嘛大概是zip很流行,所以不用担心目标平台没解压软件吧。
拓展:无损压缩算法中,除了现在常用的 lzma/lzma2/deflate 这种通用算法外,最近又涌现出一些专用算法,在 web 上应用的较多。
而在音频、视频、图片领域,通常使用的是有损压缩算法。
四、如何选用压缩方案
- tar.gz 在 linux 上最常见,在压缩率和压缩时间上拥有良好的平衡。如果有任何疑惑,就选用它吧,不会错。
- tar.xz 是新一代的压缩格式,虽然拥有更好的压缩率,压缩/解压速度相对要慢很多倍。一般在电脑性能足够好的时候,可选用它。
- 7z 和 xz 同为新一代压缩格式,它更复杂,支持多文件压缩。而且更适合跨平台,推荐使用。
- zip 因为跨平台容易导致文件名乱码,不建议使用。(虽然有这样的缺陷,但是却意外的用得很广泛,在前一节有说过)
- rar 性能不差,但是是商业格式,不开源,不建议使用。(做得比较好的是它的 recovery records,在网络环境不好,容易导致包损坏时,这个功能就特别棒)
- 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.* (它适用于上述三种压缩格式)
仅解压指定的文件
- 先查看文档树找到需要解压的文件的文件名
- 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)
- 压缩:zip
- 压缩目录:zip -r filename.zip directory (r 表示递归压缩,压缩包会包含这个目录)
- 解压:unzip
- 解压到某目录:unzip -d directory filename.zip (-d dir 表示将内容解压到dir目录内)
- -t 测试压缩档的完整性
- -x filename 排除某文件
- 解压到某目录:unzip -d directory filename.zip (-d dir 表示将内容解压到dir目录内)
3. 7z格式(需要p7zip,deepin自带,更多的请man)
- 查看目录树:7z l file.7z (List contents of archive)
- 压缩:7z a file.7z file1 directory1 (a 为创建压缩档或向压缩档中添加文件/目录,一次可指定多个要压缩的文件或目录)
- 解压:7z x file.7z -o directory (解压到指定目录)
- 测试完整性: 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网上一搜一大把)
- 压缩:rar a file.rar file (这个是试用的)
- 解压:unrar x file.rar (这个开源免费)
其实我挺中意rar的修复功能的,不知道为啥 7z xz 这样的新格式没有添加类似的 recorvery records。上次下个 Idea 的 tarball,下了四五次才下到一个完整的,要是用 rar 的话,大概一键修复就好了,可 tar.gz 我不知道怎么修复,只好一遍遍重复下载。。
六、参考
本文允许转载,转载请注明出处:常见压缩格式分析,及 Linux 下的压缩相关指令
常见压缩格式分析,及 Linux 下的压缩相关指令的更多相关文章
- Linux下的压缩zip,解压缩unzip命令详解及实例
实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip ====================== ...
- Linux下的压缩解压缩命令详解
linux zip命令zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzipunzip -o - ...
- Linux下的压缩zip,解压缩unzip命令具体解释及实例
实例:压缩server上当前文件夹的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前文件夹 unzip filename.zip ================= ...
- Linux下的压缩解压缩命令详解及实例
实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip ====================== ...
- Linux下的压缩解压缩
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲t ...
- linux下关于压缩、解压相关的操作
本文转自: http://alex09.iteye.com/blog/647128 很不错的linux下关于压缩.解压相关的操作,适合于linux初学者. .tar 解包:tar xvf Fil ...
- linux下文件压缩与解压操作
对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rap.可 ...
- Linux下的压缩文件剖析 (tar/gzip的区别)
Linux下的压缩文件剖析 对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是, ...
- Linux下的压缩(zip)解压(unzip)缩命令
.zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip命令 unzip -o ...
随机推荐
- Java面向对象之封装 入门实例(一)
一.基础概念 (一)面向对象的三大特征: 1.封装 2.继承 3.多态 (二)封装:隐藏实现细节,对外提供公共的访问方式(接口). 封装的体现之一:将属性都 ...
- 04、NetCore2.0下Web应用之Startup源码解析
04.NetCore2.0Web应用之Startup源码解析 通过分析Asp.Net Core 2.0的Startup部分源码,来理解插件框架的运行机制,以及掌握Startup注册的最优姿势. - ...
- ajax处理跨域有几种方式
一.什么是跨域 同源策略是由Netscape提出的著名安全策略,是浏览器最核心.基本的安全功能,它限制了一个源(origin)中加载文本或者脚本与来自其他源(origin)中资源的交互方式,所谓的同源 ...
- 浅析Java的Frok/Join框架
一丶Fork/Join框架产生背景: 随着并发需求的不断提高和硬件的不断发展,程序并行执行仿佛就提上日程上来了,伟大的毛主席就说过:"人多力量大",所以如果一件事可以分配给多个人同 ...
- hue上配置HA的hdfs文件(注意,HA集群必须这样来配置才能访问hdfs文件系统)
按照正常方式配置,发现无论如何也访问不了hdfs文件系统,因为我们是HA的集群,所以不能按照如下配置 将其改为 除此之外,还需要配置hdfs文件的 接着要去hadoop的目录下启动httpfs.sh ...
- Random Forest vs GradientBoostingDecisionTree
相同 随机森林和GBDT都属于集成算法,base model都是决策树. 不同 随机森林 随机森林是决策树的bagging. bagging通过重复对原训练数据集上进行有放回地采样生成的数据集用bas ...
- LoadRunner菜鸟入门学习笔记
一.LR版本及浏览器选择 1.首先百度了一下LR各版本的浏览器兼容性 8.0 最高ie6 8.1 最高ie6 9.0 最高ie7 9.5 最高ie8 11.0 最高ie9( win7 32位+LR11 ...
- [JSOI2007]祖码Zuma
题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...
- Codeforces Round #407 (Div. 1)
人傻不会B 写了C正解结果因为数组开小最后RE了 疯狂掉分 AC:A Rank:392 Rating: 2191-92->2099 A. Functions again 题目大意:给定一个长度为 ...
- 【USACO】电子游戏 有条件的背包
题目描述 翰的奶牛玩游戏成瘾!本来约翰是想把她们拖去电击治疗的,但是他发现奶牛们在玩游戏后生产 了更多的牛奶,也就支持它们了. 但是,奶牛在选择游戏平台上的分歧很大:有些奶牛想买 Xbox 360 来 ...