lzmalinux
Tar、Zip 和 Gz 之间的不同用最为简洁的描述来说可归纳为:
与 Unix 和类 Unix 系统一样,故事开始于很久之前的七十年代。1979 年 1 月的一个清晨,Tar 实用程序首次作为 Unix V7 的一部分正式面世。Tar 程序当时主要被设计为往磁带上批量高效写入文件的一种方式。现在,虽然现在大多数 Linux 用户都已经不知道磁带驱动器是什么鬼了,但 tarballs(tar 的昵称)仍被常用于将多个文件甚至整个目录树打包到单一文件当中。
需要 Linux/Unix 用户注意的是,普通的 tar 格式文档只进行归档操作而不进行压缩。换句话说就是,如果你 tar 100 个 50kb 的文件得到的 tar 归档文件大小应该为 5000kb 左右。
使用 Tar 进行文件归档的唯一好处就是减少某种粒度磁盘空间的分配。(例如在簇大小为 4kb 的磁盘上 1 字节的文件也要占用 4kb 磁盘空间,若有 1000 个 1 字节的文件分散在此磁盘上的话,则会占用 4MB 大小,而使用 Tar 归档之后则只占用 1MB 左右大小。)
值得一提的是,tar 并非 Linux/Unix 中创建归档文件的唯一方式。程序员朋友应该知道 ar,它大多情况下主要用于创建静态库,实际它也是可用来创建其它种类归档的,例如 Debian 系统中使用的 .deb 包文件就是 ar 存档。而 macOS 的 mpkg 包是使用 gzip 压缩的 cpio 档。不过 ar 和 cpio 用起来不像 Tar 这样友好、简单,所以 tar 的受欢迎程度更高,普及更广。
虽然归档是种不错的选择,但随着时间的推移和个人 PC 时代的到来,人们意识到可通过压缩数据的方式来大量节省存储成本。所以 10 年后随 MS-DOS 出现的 zip 文档便是支持压缩的归档格式,zip 最常见的压缩方式是采用 LZ77 算法 实现的 deflate。由于它由 PKWARE 商业开发,所以 zip 格式也受专利保护多年。因此,为不侵犯到 PKWARE 的专利,同样采用 LZ77 算法的 gzip 格式被推出并广泛使用。
Unix 的哲学就是 把某事做到最好 ,所以 gzip 只被设计为压缩文件。因此,为了创建压缩归档,必需先使用 tar 创建归档,之后再对归档文件进行压缩,因此才有了 .tar.gz 文件(为遵循 8.3 MS-DOS 文件名称限制,又被简称为 .tgz)。
随着技术的不断发展,具有更高压缩比的压缩算法也一一被实现,例如:在 bzip2 中实现的 Burrows-Wheeler 算法 (.tar.bz2 存档)和 LZMA 算法 实现的 .xz 存档。
现在,用户已经可以在 Linux 和 Windows 中自由使用任何归档文件格式。由于 zip 格式已经被 Windows 操作系统原生支持,因此这种格式特别适合跨平台环境。
命令 tar xvf test.tar.,这个命令即是把test.tar压缩文件解压到当前文件夹,最后那个. 既是当前目录的意思。
另外如果解压到其他目录,直接使用-C参数即可,其他扩展知识点参考如下,
-A, --catenate 追加 tar 文件至归档
-c, --create 创建一个新归档
-r, --append 追加文件至归档结尾
-u, --update 仅追加比归档中副本更新的文件
-x, --extract, --get 从归档中解出文件
-t, --list 列出归档内容
-z, --gzip, --gunzip, --ungzip 通过 gzip 压缩归档
-j, --bzip2 通过 bzip2 压缩归档
-J, --xz 通过 xz 过滤归档
--lzip 通过 lzip 过滤归档
--lzma 通过 lzma 过滤归档
-Z, --compress, --uncompress 通过 compress 压缩归档
-v, --verbose 详细地列出处理的文件过程
-k, --keep-old-files 保留源文件不覆盖
-m, --touch 不要解压文件的修改时间
-W, --verify 在写入以后尝试校验归档
f, --file=ARCHIVE
③ lzmaDecode 是什么算法
LZMA,(Lempel-Ziv-Markov chain-Algorithm的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。它使用类似于 LZ77 的字典编码机制,在一般的情况下压缩率比 bzip2 为高,用于压缩的可变字典最大小可达4GB.
C++ 语言写成的的 LZMA 开放源码压缩库使用了区间编码支持的 LZ77 改进压缩算法以及特殊的用于二进制的预处理程序。
数据流、重复序列大小以及重续序列位置单独进行了压缩。
LZMA 支持几种散列链变体、二叉树以及基数树作为它的字典查找算法基础。
BCJ / BCJ2
BCJ / BCJ2 压缩工具所附带的 LZMA SDK 包括:在 X86、ARM、PowerPC、IA-64 以及 ARM Thumb 处理器上在压缩之前跳转目标进行归一化处理。对于 x86 平台来说,这是一个近跳转、近调用以及近条件跳转需要从“向后跳 1665 字节”这样的机器语言归一化到“跳转到 5554”这样的格式,但是短跳转及短条件跳转不需要进行这样的处理。
7-Zip
尽管 7-Zip BCJ2 使用 32 位的偏移地址,但是 UPX 这样的可执行文件压缩工具当检测到 16 位 DOS 二进制文件格式的时候仍然可以使用 16 位的数值。RAR 压缩工具对 32 位的 x86 可执行文件以及 IA64 Itanium 可执行文件进行偏移地址压缩。
BCJ / BCJ2 二进制文件压缩
BCJ 与 BCJ2 之间的区别在于前者只将近跳转及近调用目标地址转换到归一化的形式,而 BCJ2 只将 x86 平台下的近跳转、近调用及条件近跳转目标分别进行压缩。
7-Zip 实现
在GNU LGPL通用公共许可证下发布的7-zip中使用的LZMA有以下几个特点:
* 高压缩比;
* 解压缩程式码较小:约 5 KB;
* 解压缩时仅需少量内存 (取决于字典大小);
* 可变更字典大小 (最大 4 GB);
* 压缩速度:在一部2GHz的处理器上运行,约可达到1MB每秒的速度;
* 解压缩速度:在一部2GHz的处理器上运行,约可达10-20MB每秒的速度;
* 支援多线程、多核心(多处理器)和Pentium 4处理器的超线程(Hyper-Threading);
这个特点使得这个这个算法的解压过程非常适合于嵌入式系统应用的场合。
可移植性
一些微软Windows专有的特性深深嵌入在源程序中,这样就很难生成一个与 Unix 兼容的版本。但是,已经有两个移植到类 Unix 平台的版本:
* p7zip 是一个或多或少地完全将 7z 及 7za 移植到 POSIX 的 7-zip 版本,这些系统包括 Linux、Solaris、OpenBSD、FreeBSD、Cygwin 等 Unix 系统以及 Mac OS X 和 BeOS等。
* LZMA Unix Port 是一个只移植了 LZMA 中代码的版本,它是一个类似于 gzip 的基于数据流的压缩工具。它不是一个归档工具,而只是一个普通的压缩工具,并且由于它在没有数据头中没有未压缩文件大小的 UInt64 变量,所以它与 7-zip 生成的 LZMA 数据流中不同。7-zip 使用一种更加灵活的归档格式 7z,因此二者都不能互相使用对方生成的数据,至少在目前是这样。
应用
使用或者支持 LZMA 的软件有:
* Nullsoft Scriptable Install System
* Inno Setup
* cramfs and SquashFS, with applied patches
* lrzip ("long range zip", or "LZMA rzip")
* PyLZMA,Igor Pavlov 的 LZMA SDK 的 Python 语言接口
* FreeArc, 归档工具及 LZMA SDK 的 Haskell 语言接口
* 用于 Pascal 语言的 LZMA SDK
④ 7z安装文件里的7zg和7zfm都是什么
7zfm.exe(7-zip File Manager)是7-Zip软件的GUI主程序,7zg.exe是7-Zip软件主程序所依赖的软件模块,供7zfm.exe主程序调用,提供压缩算法支持。
7zfm.exe作为7-Zip软件的GUI主程序,提供了7-Zip操作管理系统文件、文件夹的窗口,在操作界面中可以方便的访问系统文件,提供压缩、提取的便捷方式。
7zfm.exe、7zg.exe支持一系列压缩算法:LZMA(改良与优化后的 LZ77 算法)、LZMA2(改良的 LZMA 算法)、PPMD(基于 Dmitry Shkarin 的 PPMdH 算法)、BCJ(32 位 x86 可执行文件转换程序)、BCJ2(32 位 x86 可执行文件转换程序)、BZip2(标准 BWT 算法)。
(4)lzmalinux扩展阅读:
支持格式:
1、压缩/解压缩:7z、 XZ、 BZIP2、 GZIP、 TAR、 ZIP 和 WIM
2、仅解压缩:ARJ、CAB、CHM、CPIO、CramFS、DEB、DMG、FAT、HFS、ISO、LZH、LZMA、MBR、MSI、NSIS、NTFS、RAR、RPM、SquashFS、UDF、VHD、WIM、XAR、7Z
3、对于 ZIP 及 GZIP 格式,7-Zip 能提供比使用 PKZip 及 WinZip 高 2-10% 的压缩比
4、为 7z 与 ZIP 提供更完善的 AES-256 加密算法
5、7z 格式支持创建自释放(SFX)压缩包
6、Windows 资源管理器集成,强大的的文件管理器,强大的命令行版本,支持 FAR Manager 插件,支持 79 种语言,7-Zip 适用于 Windows 7 / Windows10 / Vista / XP / 2008 / 2003 / 2000 / NT / ME / 98,并且有面向 Mac OS X、Linux、Unix 平台的命令行版本。