[Linux] 常见压缩格式
一、常见压缩档
压缩格式 | 特点 |
---|---|
*.zip | zip 程序压缩打包的档案; (很常见,但是因为不包含文档名编码信息,跨平台可能会乱码) |
*.rar | rar 程序压缩打包的档案;(在windows上很常见,但是是商业软件。) |
*.gz | gzip 程序压缩的档案; (linux目前使用最广泛的压缩格式) |
*.bz2 | bzip2 程序压缩的档案; |
*.xz | xz 程序压缩的档案; |
*.tar | tar 程序打包的资料,并没有压缩过; |
*.tar.gz | tar 程序打包的档案,其中并且经过 gzip 的压缩 (最常见) |
*.tar.bz2 | tar 程序打包的档案,其中并且经过 bzip2 的压缩 |
*.tar.xz | tar 程序打包的档案,其中并且经过 xz 的压缩 (新一代压缩选择) |
*.7z | 7zip 程序压缩打包的档案。 |
目前最常见的是
tar.gz
tar.xz
tar.7z
这三种格式。
二、能否压缩多文档分类
-
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
很流行,所以不用担心目标平台没解压软件吧。
四、如何选用压缩方案
tar.gz
在 linux 上最常见,在压缩率和压缩时间上拥有良好的平衡。如果有任何疑惑,就选用它吧,不会错。tar.xz
是新一代的压缩格式,虽然拥有更好的压缩率,压缩/解压速度相对要慢很多倍。一般在电脑性能足够好的时候,可选用它。7z
和xz
同为新一代压缩格式,它更复杂,支持多文档压缩。而且更适合跨平台,推荐使用。zip
因为跨平台容易导致文档名乱码,不建议使用。(虽然有这样的缺陷,但是却意外的用得很广泛,在前一节有说过)rar
性能不差,但是是商业格式,不开源,不建议使用。(做得比较好的是它的 recovery records,在网络环境不好,容易导致包损坏时,这个功能就特别棒)tar.bz2
算是 linux 压缩历史上,过渡时期的产物,性能也介于gz
和xz
之间,一般来说不需要考虑它。
五、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),c 为 create
-t :查看打包档案的内容含有哪些档名,重点在查看『档名』,t 为 list
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开,x 为 extract
注意:-c, -t, -x 不可同时出现在一串指令列中
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
注意:-z, -j, -J 不可以同时出现在一串指令列中
-v :在压缩/解压缩的过程中,将正在处理的档名显示出来,v 为 verbose
-f :-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项!(比较不会忘记), f 为 filename
-C :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
-p :保留备份资料的原本权限与属性,常用于备份 (-c) 重要的设定档
-P :保留绝对路径,亦即允许备份资料中含有根目录存在之意
--exclude=FILE:在压缩的过程中,不要将 FILE 打包
详细参数如下所示:
tar [options] -f archive.tar [files...]
-f archive.tar:指定归档文件的名称。
[files...]:要打包的文件和目录。
options 参数
基本操作选项
-c:创建一个新的归档文件。
-x:解压归档文件。
-t:列出归档文件的内容。
-r:向现有归档文件中追加文件。
-u:仅追加比归档文件中已有文件更新的文件。
-d:找到归档文件中与文件系统不同步的差异。
-A:将一个 .tar 文件追加到另一个 .tar 文件中。
文件选择和排除
-f <file>:指定归档文件的名称(必须放在选项列表的最后)。
-C <directory>:切换到指定目录进行操作。
--exclude=<pattern>:排除匹配指定模式的文件。
--exclude-from=<file>:从指定文件读取要排除的模式。
--exclude-caches:排除目录中的缓存文件。
--exclude-backups:排除以 ~ 结尾的备份文件。
--exclude-vcs:排除版本控制系统生成的文件(如 .git、.svn 等)。
压缩和解压选项
-z:使用 gzip 压缩归档文件。
-j:使用 bzip2 压缩归档文件。
-J:使用 xz 压缩归档文件。
--lzip:使用 lzip 压缩归档文件。
--lzma:使用 lzma 压缩归档文件。
--lzop:使用 lzop 压缩归档文件。
--zstd:使用 zstd 压缩归档文件。
-a:自动选择压缩方式(基于归档文件的扩展名,如 .tar.gz、.tar.bz2 等)。
-I <command>:使用指定的压缩程序进行压缩或解压。
输出和交互选项
-v:显示详细操作过程(verbose)。
--progress:显示进度条(与 -v 一起使用时)。
-w 或 --interactive:在每次操作前询问用户确认。
--checkpoint:在处理每个文件后显示一个检查点。
--checkpoint-action=<action>:在检查点执行指定的动作,如 echo、dot 等。
--totals:在操作结束后显示处理的总字节数。
--verbose:详细显示处理的信息。
--quiet:尽可能少的输出信息。
文件和权限相关选项
-p:保留文件的原始权限(解压时)。
--same-owner:尝试将解压的文件设为原始所有者(需超级用户权限)。
--no-same-owner:不设置文件所有者。
--same-permissions:保留文件的原始权限(与 -p 相同)。
--no-same-permissions:不保留原始权限,使用当前用户的 umask 设置权限。
-m:在解压时不恢复文件的修改时间,而使用当前时间。
归档管理选项
-k 或 --keep-old-files:解压时保留已有文件,不覆盖。
--overwrite:解压时强制覆盖已有文件。
--remove-files:归档成功后删除原始文件。
--delete:从归档文件中删除指定文件(仅限 gnu tar)。
--keep-newer-files:解压时保留比归档中较新的文件。
--listed-incremental=<file>:创建增量备份或从增量备份恢复。
文件系统和设备选项
-L <N>:分割大于 N 字节的归档文件(对于磁带机)。
--tape-length=<number>:指定磁带长度(对于磁带机)。
--multi-volume:创建或恢复多卷归档文件。
-M:与 --multi-volume 一起使用,处理多卷归档文件。
--use-compress-program=<prog>:使用指定的压缩程序。
其他实用选项
--transform=<expression>:重命名归档中的文件。
--strip-components=<number>:解压时剥离指定数量的路径组件。
--ignore-failed-read:忽略读取错误并继续操作。
--occurrence=<number>:在归档中选择第 number 个出现的文件。
-S:处理稀疏文件(仅归档实际使用的块)。
--no-recursion:不递归进入目录。
-h 或 --dereference:归档符号链接指向的文件而非链接本身。
帮助和版本信息
--help:显示帮助信息。
--version:显示 tar 的版本信息。
tar
最常用的命令:
压 缩:tar -zcv -f filename.tar.gz <压缩的档案或目录名称>
查看文档树:tar -ztv -f filename.tar.gz
解压缩:tar -zxv -f filename.tar.gz -C <解压缩的目录>
上面的命令需要根据压缩格式的不同,选用
-z
-j
-J
选项,而实际上文档的后缀就已经表明了它的压缩格式,不免让人觉得多余。
因此,通用的压缩/解压项为:
-a, --auto-compress
Use archive suffix to determine the compression program.
则通用的解压命令为:
tar -axv -f file.tar.* (它适用于上述三种压缩格式)
仅解压指定的文档:
- 先查看文档树找到需要解压的文档的文档名
tar -zxv -f
打包档.tar.gz
待解开档名
打包某目录,但不含该目录下的某些档案:
tar -zcv -f filename.tar.gz directory --exclude=FILE1 --exclude=func*
使用 --exclude=FILE 选项(支持文档名的模式匹配,而且可重复)
注意:在指定排除目录的时候,目录的话结尾不能带/否则将会排除失败
只打包目录中比指定时刻更新的文档:
使用 --newer-mtime="2025/03/07"
选项。
2. zip
格式(linux 一般也会自带,详细的请 man
)
- 压缩命令:
zip
- 压缩目录:
zip -r filename.zip directory
-r
表示递归压缩,压缩包会包含这个目录
- 解压命令:
unzip
- 解压到某目录:
unzip -d directory filename.zip
(-d dir
表示将内容解压到dir目录内)-t
测试压缩档的完整性-x
filename 排除某文档
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
就行。
注意:
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
(这个开源免费)
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭