在 Windows + WSL(CentOS 7)环境中使用 Visual Studio Code Remote – WSL 时,某些可执行脚本保存后会从 755 变为 644,导致无法直接运行。本文记录问题复现、根因分析及修复步骤,供参考。


1 · 问题复现

  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
  2. 使用 VS Code(Remote – WSL)打开 build.sh,对脚本做任意修改并保存。

  3. 回到终端再次查看权限:

    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

最后修改:2025 年 04 月 17 日 04 : 27 PM