电脑必备
部署包解压后权限全乱,我拿两台服务器对账,发现是解压工具没保留ACL
88 0 13
上周发版踩了个坑,记录一下,给同样用脚本解压部署包的兄弟提个醒。
场景:CI 流水线把构建产物打成 zip,传到目标机后由部署脚本自动解压。一直跑得好好的,结果这次上线后服务起不来,日志报权限拒绝。
排查过程:
- 先看文件权限,
ls -l一看,解压出来的可执行文件全变成了 644,原本应该是 755。 - 怀疑是打包环节的问题,在构建机上解包测试,权限是对的,排除。
- 找运维要了目标机的操作记录,发现解压用的是 Win解压缩 的命令行模式(为了图快)。
- 拿两台测试机对账:同一份 zip,A 机用 Win解压缩 解压,B 机用 7-Zip 解压(都带
-aos之类参数),结果 7-Zip 把 Unix 权限位完整还原了,Win解压缩 解出来全是 644,ACL 和属主信息也丢了。
结论:
- Win解压缩 在 Windows 桌面端解压确实快,GUI 操作也顺手,但它的命令行对 Unix 权限位的保留支持不行,跨平台部署包慎用。
- 7-Zip 的
7z x能保留权限位,配合-p和-o参数适合脚本化部署。 - 如果非要用 Win解压缩 做日常压缩,建议只用于纯 Windows 环境的日志、文档包,别往 Linux 服务器上扔。
我的选型建议:
- 普通用户:Win解压缩 够用,右键菜单和速度都省心。
- 开发/运维:7-Zip 命令行更靠谱,尤其是涉及权限、符号链接的包。
- 混合环境:打包时就用 7z 格式,解压端统一用 7-Zip,避免来回折腾。
留个问题:
你们在 CI 里解压部署包都用什么工具?有没有遇到过权限位丢失导致服务起不来的情况?有没有试过 tar.gz 的方案?欢迎交流。
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
