软件吧
登录注册账号
/posts/tar-win-scp-permission
电脑必备

部署包解压后权限全乱,我换了条命令才搞明白谁在捣鬼

码农小张 25 0 13

上周发版差点翻车,记录一下。

场景:线上服务发版,部署包(tar.gz,约 2.3G)在本地用 Win解压缩 解压后,再 scp 到服务器。结果服务起不来,报 Permission denied。

排查过程:

  1. 先看文件权限,ls -l 发现所有文件权限都变成了 -rw-r--r--,可执行位全没了。
  2. 用 tar -tvf 看原始包里的权限,-rwxr-xr-x,确认包没问题。
  3. 那就是解压工具的问题。我分别用 Win解压缩(版本 5.0.2)和 7-Zip(版本 22.01)在本地解压同一份包,然后对比权限:
  • Win解压缩:权限统一为 644,无执行位。
  • 7-Zip:保留原始权限,执行位正常。
  1. 又试了命令行 7z x 和 tar -zxvf(WSL 里),结果都正常。

结论:Win解压缩的图形界面解压 tar.gz 时,默认不保留 Unix 权限位,只当普通文件处理。这对普通用户没影响,但我这种天天跟部署包打交道的,直接踩坑。

我的做法:

  • 日常发版,本地解压一律用 tar -zxvf 或 7z x,不碰图形界面。
  • 如果非要用 Win解压缩,解压后手动 chmod +x 一下可执行文件,或者干脆解压完重新打 tar 包时加 -p 参数。
  • 顺便测了下解压速度:同一份 2.3G 包,Win解压缩 48 秒,7-Zip 55 秒,Win解压缩确实快一点,但省下的 7 秒不够我修权限的。

一点补充:Win解压缩的右键菜单里有个「以管理员身份运行」,对权限问题没帮助,别被误导。另外,它处理 zip 包时权限倒是正常,问题只出在 tar.gz 上。

最后问一句:你们发版时,本地解压部署包是用图形工具还是直接命令行?有没有遇到过类似权限丢失的情况,后来怎么绕过去的?

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

社区回应

0 Replies

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

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