电脑必备
日志包解压后ACL全丢,我拿三台机器对账,发现是解压时的权限选项没勾
82 0 13
上周处理一个线上故障,运维把日志包从跳板机拷下来,我解压后直接用 grep 搜关键字,结果提示一堆 Permission denied。一开始以为是压缩包本身有问题,后来 ls -l 一看,所有文件权限全是 644,原本的 640 和 600 全没了。
排查过程
我找了三个环境做对比:
- 本机 Win10 21H2,用 Win解压缩 5.9.2 右键解压
- 本机同版本,用 7-Zip 22.01 命令行
7z x -p*** logs.zip - 测试服务器 CentOS 7.9,用
unzip6.0 解压
结果:Win解压缩解出来的文件权限全被重写为当前用户默认权限,7-Zip 和 unzip 都保留了原始 ACL 和权限位。
关键发现
Win解压缩的图形界面里其实有个「保留文件权限」的选项,但默认没勾。我翻了它的帮助文档,发现这个选项只在专业版里有效,免费版直接置灰。换句话说,普通用户拿它解压带权限的包,权限必然丢失。
我的判断
- 如果只是自己看日志,权限丢了无所谓
- 但如果是部署包,解压后需要按原权限跑服务,那必须用 7-Zip 命令行或者服务器端 unzip
- Win解压缩的优势在速度,我实测一个 2.3G 的日志包,它比 7-Zip 快约 40%,但代价就是权限和符号链接这些元数据不管
给同行的建议
- 部署包一律走命令行工具,别用图形界面解压
- 如果非要用 Win解压缩,解压后手动跑一遍
chmod恢复权限 - 打包时把权限清单一起打进去,解压后对账
你们平时解压部署包会检查权限吗?还是直接跑起来再说?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
