“Permission Denied”是权限机制多层拦截所致,需区分PowerShell执行策略、Linux文件x权限、npm/pip全局安装路径、VSCode进程属主四类原因,逐项排查修复。

“Permission Denied”不是 VSCode 的 bug,而是终端执行环境在某一层被系统权限机制拦住了——必须分清是文件系统权限、脚本执行策略、终端继承权限,还是跨系统挂载导致的权限错位。
PowerShell 执行策略阻止 .ps1 脚本运行
VSCode 默认终端是 PowerShell,而 Windows 默认策略为 Restricted,连本地写的 build.ps1 都会报错:File build.ps1 cannot be loaded because running scripts is disabled on this system. 这类错误常被误认为“权限不足”,实际和文件属主、chmod 无关。
- 只对当前用户临时放行(推荐调试用):
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser - 验证是否生效:
Get-ExecutionPolicy -Scope CurrentUser应返回RemoteSigned - 别用
Unrestricted或Bypass,尤其在公司电脑上可能被组策略覆盖重置 - 如果改完没反应,关掉现有终端再按
Ctrl+Shift+`新建一个——旧终端不会自动刷新策略
Linux/macOS/WSL 下 .sh 或可执行文件报 Permission denied
根本原因是文件缺少 x 权限位。即使你在 VSCode 里写了完整脚本,保存后直接 ./script.sh 仍会失败,和终端类型、PATH、Python 环境都无关。
- 给脚本加执行权:
chmod +x script.sh - 确认权限已写入:
ls -l script.sh中应看到-rwxr-xr-x(第三位是x) - 在 WSL 中若从
/mnt/c目录运行脚本,chmod可能无效——因为 NTFS 不支持 POSIX 权限位;应把项目移到~/projects等原生 Linux 路径下 - VSCode Remote-WSL 模式下,终端行为等同于原生 Linux shell;但若通过 Windows 资源管理器打开
\wsl$路径再启动 VSCode,就退化成混合权限模型,极易出错
npm install -g 或 pip install 报 EACCES / permission denied
这类错误几乎全是目标路径不可写导致的:npm 默认往 /usr/local/lib/node_modules(macOS/Linux)或 C:Program Files
odejs
ode_modules(Windows)写文件,普通用户无权访问。
- macOS/Linux:运行
npm config set prefix ~/.local,再把~/.local/bin加进$PATH(改~/.zshrc),之后npm install -g就写入用户目录 - Windows:优先用
npm install --user(部分 CLI 工具支持),或确认工具是否提供便携版;非必要不启用管理员模式 - 绝对不要在 VSCode 终端里敲
sudo npm install -g——npm 会以 root 身份执行 preinstall 脚本,可能污染全局node_modules权限 - Python 用户请始终用
pip install --user,生成的二进制在~/.local/bin/,同样需确保该路径在$PATH中
VSCode 保存文件或运行 code . 时提示 EACCES / Permission denied
这通常意味着 VSCode 进程本身或目标路径的属主/权限状态异常,最常见于曾用 sudo code . 启动过项目,或项目目录由 root 创建。
- 检查目录归属:
ls -ld .,若显示root:root或root:staff,说明是高权限创建的 - 修复命令(macOS/Linux/WSL):
sudo chown -R $USER:$GROUPS ./your-project - Windows 上若用 WSL,避免在
/mnt/c/Users/xxx下开发;推荐把项目放在~/projects,并始终用 Remote-WSL 打开 - 切忌
chmod 777整个目录——某些 macOS 版本会触发 SIP 保护,反而让问题更隐蔽 - 已用
sudo code .启动过的用户,建议清理缓存:rm -rf ~/.config/Code/Cache ~/.config/Code/CachedData(Linux/macOS)
真正麻烦的不是单点修复,而是多个限制叠加:PowerShell 策略 + WSL 挂载权限 + 项目路径属主异常 + 杀软拦截,四层嵌套时只改一个根本看不出效果。每次只调一项,用 Ctrl+C 终止残留进程、关掉旧终端、重启 VSCode,才能准确定位卡在哪一层。


















