软件吧
登录注册账号
/posts/zip-tar-rar-win
办公软件

给部署包加权限校验,我比对四种压缩格式的元数据,结论有点意外

码农小张 70 0 13

最近在搞部署包的权限校验,踩了个坑,记一笔。

背景:我们后端发版,部署包里混着可执行脚本和配置文件,权限位不对直接跑不起来。之前靠人肉 ls -l 核对,后来想着能不能在打包环节就把权限卡死,省得每次部署前还得手动查。

测试方法:拿同一个目录(含 755 脚本、644 配置、600 密钥文件),分别用 zip、tar.gz、7z、rar 打包,解压后对比权限位是否保留。Win 环境下用 7-Zip 24.08 和 WinRAR 7.01 命令行,Linux 侧用 unzip 6.0 和 tar 1.35 解压,各跑三遍。

结果:

  1. tar.gz:权限位完整保留,解压后和原目录一致。但 Win 下解压得用 bsdtar 或 WSL,普通用户拿 WinRAR 解出来权限全丢。
  2. 7z:能存权限属性(NTFS 或 Unix 扩展属性),但解压时得看解压工具支不支持。7-Zip 自己解没问题,Win 解压解出来权限位就没了。
  3. zip:默认不存 Unix 权限,加 -X 参数能存,但很多图形解压工具不认。
  4. rar:WinRAR 默认存 NTFS 权限,Linux 侧解压需要 unrar 且带 -p 或 -ow 参数,坑最多。

结论:如果部署链路全是 Linux,tar.gz 最稳;如果得在 Win 上打包、Linux 上跑,7z 加 7-Zip 命令行解压是折中方案,但得把解压工具版本锁死。Win 解压缩解压速度确实快,但命令行支持弱,没法在脚本里精确控制权限恢复,所以这活我现在交给 7-Zip 命令行干。

额外提醒:WinRAR 打包时默认勾选“保存文件安全信息”,存了 NTFS ACL,解压到 Linux 上会多出一堆 ._ 文件,别问我怎么知道的。

问题抛给你们:有没有人试过用 7z 的 -mcu=on 参数强制存 Unix 扩展属性?我测下来有的版本认、有的不认,想确认是不是我参数写错了。

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

社区回应

0 Replies

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

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