十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【超详细】搞懂tar、tgz、zip、rar、7z归档压缩格式,理清跨平台踩坑根源

【超详细】搞懂tar、tgz、zip、rar、7z归档压缩格式,理清跨平台踩坑根源 文章目录1、先分清归档与压缩很多初学者的概念误区1.1 归档与压缩二者完全是两件独立工作1.2 两套技术路线诞生的历史背景2、tar家族格式完整拆解tar / tar.gz / tgz / tar.bz2 / tar.xz2.1 tar归档格式只打包不压缩2.2 gzip介入之后tar.gz与tgz格式由来2.3 tar系列常用命令与高频报错场景3、zip、rar、7zPC生态主流归档压缩格式3.1 zip格式跨平台通用的主流方案3.2 rar私有闭源格式的优势与局限3.3 7‑Zip与7z开源高压缩格式4、跨平台开发实战Windows、WSL交互下大量真实踩坑4.1 Windows解压tar/tgz之后复制进WSL程序无法运行4.2 不同业务场景归档压缩格式选型参考4.3 工具选型的补充提示5、归档压缩格式发展时间线梳理1、先分清归档与压缩很多初学者的概念误区1.1 归档与压缩二者完全是两件独立工作绝大多数新手会把归档、压缩混为一谈认为所有后缀带.tar、.zip的文件全都是“压缩文件”实际二者要完成的任务完全不一样。归档Archive把一堆零散文件、子目录合并收纳进一个单独文件。归档只负责打包收纳不会减小文件体积。它会记录目录层级、各类附属元信息方便备份、批量传输大量零散文件。类比把一堆书本整齐装进纸箱书本本身重量、体积不会发生变化。压缩Compress通过特定算法修改文件内部二进制数据消除冗余信息降低文件占用磁盘空间。类比把纸箱里面的书本做挤压整体箱子体积变小。部分格式可以一步同时完成归档压缩例如zip、7z。Unix生态里面的tar体系遵循“一个工具只做好一件事”的设计理念tar只做归档打包压缩交给gzip、bzip2这类独立程序完成所以出现.tar.gz、.tgz这种组合产物。1.2 两套技术路线诞生的历史背景PC个人电脑生态从早期IBM‑PC时代就追求简单易用一个工具同时完成打包压缩诞生zip格式Windows系统原生支持这也是普通用户日常最常接触的格式。而tar诞生于70年代大型机磁带备份场景诞生在Unix操作系统环境下。磁带属于顺序读写存储设备不能像硬盘一样随意跳转读取零散小文件必须把大量小文件拼接成连续字节流写入磁带tar工具就是为解决这个场景开发。这里需要做一个说明文章后续会涉及一部分Unix相关概念不是为了讲解完整操作系统课程。只是tar这套格式诞生于Unix它会保存Unix独有的文件元数据权限、软链接、属主正是这些元数据造成Windows与WSL/Linux交互时大量莫名其妙的故障。理解这部分元数据是解决跨平台解压报错、程序无法运行的关键并不是额外拓展无关知识点。2、tar家族格式完整拆解tar / tar.gz / tgz / tar.bz2 / tar.xz2.1 tar归档格式只打包不压缩tar全称Tape ARchive1975年作为Unix V7系统内置工具对外发布最初目标服务于磁带机备份。执行归档的时候tar会把目录树下全部文件拼接成单一流式文件同时保存一套Unix专属元信息文件读写执行rwx权限、文件所有者用户与用户组、文件时间戳、符号链接。原生tar不做任何压缩打包之后总文件大小≈全部原始文件相加总和后缀为.tar。Windows文件系统不存在rwx权限、软链接这一套机制。所以当你在Windows解压tar包这些Unix专属元信息会直接全部丢弃。这是后续跨平台踩坑最核心的源头。2.2 gzip介入之后tar.gz与tgz格式由来仅仅完成归档文件体积没有缩减存储、网络传输成本很高。1992年GNU项目推出gzip压缩工具使用DEFLATE算法专门做单文件数据流压缩。工程上形成标准操作流程第一步使用tar把大量文件、目录打包生成未压缩tar归档文件第二步调用gzip对整个tar归档文件做整体压缩。得到产物就是.tar.gz行业内嫌后缀名字过长创造简写后缀.tgz。.tar.gz与.tgz二进制数据完全一模一样仅仅后缀书写名字不同可以互相改名互换使用。顺着这套两步式思路后续出现更多压缩方案与对应的后缀bzip2算法压缩率高于gzip运算速度更慢 →.tar.bz2xz算法压缩能力最强但是消耗CPU资源更高 →.tar.xz以上全部格式底层都依靠tar完成归档再调用外部压缩工具处理。tar工具提供参数封装这套流程不需要用户手动分两步敲命令。2.3 tar系列常用命令与高频报错场景处理纯粹未压缩的.tar归档包不能带上代表gzip解压的‑z参数# 解压纯tar包tar-xvfdemo.tar# 创建tar归档包tar-cvfdemo.tar ./target_folder处理.tgz/.tar.gz增加‑z参数启用gzip解压逻辑# 解压tgz/tar.gztar-zxvfdemo.tgz# 打包并且gzip压缩输出tgztar-zcvfdemo.tgz ./target_folder新手最容易踩坑把未压缩tar包带上‑z参数程序尝试执行gzip解压直接抛出解压失败报错。tar格式另外一个局限老式tar实现为完整流式读取想要提取包内单个文件需要从头到尾扫描整个归档不能随机定位读取。zip格式不存在这个问题可以直接提取包内任意单个文件。3、zip、rar、7zPC生态主流归档压缩格式3.1 zip格式跨平台通用的主流方案zip格式1989年由Phil Katz发布对应工具PKZIP面向早期IBM‑PC个人计算机设计。zip设计逻辑和tar体系有本质区别不需要分开归档、压缩两步操作。zip可以读取每一个独立文件逐个完成压缩再收纳进归档包内部。该设计带来两大优势第一支持随机访问可以直接提取压缩包里面某一个单独文件不需要完整解压全部内容。第二从设计之初就考虑跨平台兼容性不存储Unix专属的权限、属主、软链接元数据。Windows从Win95版本开始系统原生支持zip解压macOS、Linux也自带zip/unzip工具。正因为不会保存Unix权限信息如果你把Linux可执行程序打包为zip解压到Linux/WSL之后程序不会自带可执行标记依然需要手动执行chmod x赋予权限。3.2 rar私有闭源格式的优势与局限rar格式1993年由俄罗斯开发者Eugene Roshal开发算法属于私有闭源专利。在早年硬件条件下rar压缩效果优于zip格式。借着WinRAR软件普及在国内Windows普通用户群体广泛流行。它支持分卷压缩、损坏包修复、高强度加密这些实用特性。但是闭源属性带来明显短板Linux、macOS系统没有系统自带解压工具必须额外安装第三方程序。开源项目、学术数据集几乎不会选择rar作为分发格式规避专利授权带来的额外依赖风险。工程开发场景不建议把rar作为项目分发格式。3.3 7‑Zip与7z开源高压缩格式7‑Zip工具以及7z格式1999年对外公开整套方案完全开源免费使用LZMA压缩算法同等条件下压缩效果通常优于zip、rar。7‑Zip工具是多格式兼容工具不仅可以生成7z包还可以解压tar、tgz、zip、rar几乎市面上绝大多数归档格式。Win10系统没有原生支持7z需要手动安装7‑ZipWin11已经增加原生7z支持。7z适合追求高压缩率同时希望避开闭源专利的场景。4、跨平台开发实战Windows、WSL交互下大量真实踩坑4.1 Windows解压tar/tgz之后复制进WSL程序无法运行这是很多新手接触Linux项目、MIREX这类老旧数据集时高频遇到的现象。原因.tar、.tgz包内部保存Unix的rwx执行权限标记。Windows文件系统不识别这套元数据在Windows资源管理器解压的时候权限标记会直接被丢弃。把解压完成的文件拷贝进WSL二进制程序缺少执行权限无法启动。有两种处理方案方案一不把tgz包在Windows解压直接把完整的.tgz文件复制到WSL内部目录在WSL终端执行tar解压权限信息完整保留推荐优先采用该方案。方案二已经在Windows解压完成拷贝到WSL之后手动赋予执行权限chmodx your_binary_program延伸知识点不仅仅是二进制程序shell脚本.sh同样依赖这套执行权限标记同样会出现该问题。4.2 不同业务场景归档压缩格式选型参考面向普通Windows用户互相传递文档、资料优先选择zip。Win10、Win11原生支持不需要额外安装软件兼容性最好。开源项目、学术音频图像数据集、WSL/Linux服务器资源分发优先选择**.tar.gz(tgz)**这是类Unix生态事实标准。需要极高压缩率同时规避私有专利约束选择7z格式。工程分发尽量避开rar格式跨平台依赖复杂会给使用者带来额外部署负担。4.3 工具选型的补充提示Win11资源管理器原生支持tar、tgz、7z解压Win10系统需要安装7‑Zip或者Bandizip。不要使用Windows解压之后再修改Linux项目源码Windows文件系统和Linux权限模型完全不同修改完成再拷贝回WSL会产生一系列难以排查的权限异常。5、归档压缩格式发展时间线梳理1975tar工具诞生于Unix V7仅做归档打包无压缩能力面向磁带备份。1989zip格式发布面向PC个人电脑归档压缩一体化。1991Linux内核发布继承Unix全套工具链tar得到大规模普及。1992gzip发布targzip组合.tar.gz/.tgz格式开始广泛使用。1993rar私有闭源格式诞生。19997‑Zip、7z开源格式对外发布。可以看到tar家族全部工具根源于早期Unix系统设计理念。Windows生态和Unix生态两套体系的设计目标不一样元数据模型存在差异这也是Windows日常很少见到tar包但是一接触开源、科研数据集就频繁遇到tar包的根本原因。很多初学者只记命令没有分清归档和压缩两个概念遇到跨系统文件传输碰到程序无法执行、解压报错不知道故障根源来自归档包携带的系统元信息。理清各个格式诞生背景、存储内容遇到异常时就可以快速定位问题。你在WSL或者处理各类开源数据集的时候有没有遇到过解压之后脚本或者二进制程序无法运行的情况欢迎留言交流。
返回列表