在 Windows + WSL(CentOS 7)环境中使用 Visual Studio Code Remote – WSL 时,某些可执行脚本保存后会从 755 变为 644,导致无法直接运行。本文记录问题复现、根因分析及修复步骤,供参考。
1 · 问题复现
-
在 WSL CentOS 7 中创建脚本并赋予执行权限:
echo '#!/bin/bash' > build.sh chmod 755 build.sh ls -l build.sh # -rwxr-xr-x 1 user user 16 Apr 17 15:02 build.sh
-
使用 VS Code(Remote – WSL)打开
build.sh
,对脚本做任意修改并保存。 -
回到终端再次查看权限:
ls -l build.sh # -rw-r--r-- 1 user user 23 Apr 17 15:04 build.sh
执行权限变为 644。
2 · 根因分析
-
WSL 对 NTFS 的挂载需要“元数据(metadata)”支持。
该功能将 Linux 权限位存放到 NTFS 扩展属性中,确保读写时不丢失执行位。 -
Windows 10 2004 及以上版本把该支持拆分为一个可选组件(Feature Name:
Microsoft-Windows-Subsystem-Linux
)。
若组件未启用,文件在写入时按 NTFS 默认权限重新创建,导致 644。 -
VS Code 保存文件时执行“写新文件再替换”的安全写入流程,因此最容易触发权限丢失;终端内
vim
/nano
采用原地修改,可能不出现问题。
3 · 解决方案
启用 WSL 可选组件 → 重启。
以 管理员身份运行 PowerShell,执行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
安装完成后 重启 Windows。