软件吧
登录注册账号
/posts/7z-zip-2
电脑必备

部署包用7z还是zip?我拿三种工具实测了权限保留和增量更新

码农小张 92 0 13

最近在整理 CI 的制品打包脚本,遇到个挺具体的问题:部署包用 7z 还是 zip,在 Linux 上解压后权限保留到底差多少? 之前社区里聊解压速度的多,但权限这块没人细说,我干脆拿手头的日志包和部署包做了组对照。

测试环境

  • 三台机器:Ubuntu 22.04(内核 5.15)、CentOS 7(3.10)、WSL2 Ubuntu(5.15)
  • 工具版本:7-Zip 23.01、Win解压缩 5.2.1、Info-ZIP zip 3.0 / unzip 6.0
  • 样本:一个 2.1G 的日志归档(含 1200 个文件,权限混杂 644/755/600),一个 800M 的部署包(含可执行脚本和配置文件)

核心结论

  1. zip 默认不保留 Unix 权限,解压出来全是 644,可执行脚本直接废了。必须加 -X 参数并在打包时用 zip -r -X 保留 extra field,unzip 时才会还原权限。这一点在跨平台时特别坑,Windows 上打的 zip 到 Linux 解压基本全变 644。
  2. 7z 对权限的支持取决于格式。7z 格式本身不存 Unix 权限,但 tar 格式可以。所以如果是 Linux 部署包,用 7z a -ttar 再套 gzip 最稳,权限原样保留。Win解压缩 5.2.1 我试了,图形界面解压 tar.gz 权限是对的,但命令行只支持基本解压,没法像 7z 那样指定 -ttar 参数做格式转换。
  3. 增量更新:zip 支持 zip -u 只更新变化文件,7z 得用 7z u 但会重写整个归档。对频繁发版的部署包,zip 的增量优势明显。不过 7z 的固实压缩对日志包压缩率更高,2.1G 的日志包 7z 压到 380M,zip 是 520M,差 27%。

实测数据

工具/格式解压 2.1G 耗时权限保留增量更新
7z (tar.gz)48s完整不支持
zip (-X)62s完整支持
Win解压缩 GUI41s完整(tar.gz)不支持

Win解压缩 解压速度确实最快,但命令行能力弱,适合普通用户日常用。我现在的做法是:部署包用 tar.gz + 7z 命令行打包,日志归档用 7z 固实压缩,需要增量更新的场景用 zip -X。

一个容易忽略的坑

在 CentOS 7 上,unzip 6.0 对 zip 的 extra field 解析有 bug,权限还原偶尔失败。我拿同一份 zip 在三台机器上解压,CentOS 7 有 3 次权限错乱,Ubuntu 两次都正常。后来查了是 unzip 版本问题,升级到 6.0-20 以上才稳定。

问一句:你们部署包里如果带可执行脚本,是用 tar.gz 还是 zip?有没有遇到过权限还原不一致的情况?

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。