WSL Ubuntu执行truffle unpack到Windows目录报权限错误如何解决
核心问题原因
这个报错是WSL跨文件系统操作的典型兼容性问题,根因有两个:
- WSL默认对Windows NTFS挂载目录(/mnt/c/开头的路径)没有开启元数据支持,Linux侧的文件权限、隐藏文件属性修改操作会被Windows系统拦截,哪怕用sudo、管理员身份启动WSL也无法绕过权限限制
- Truffle unpack操作会写入.gitattributes这类以.git开头的隐藏配置文件,这类文件在Windows目录下容易被系统安全机制、杀毒软件临时锁定,进一步触发EPERM权限错误
解决方案
方案1(推荐):将项目放在WSL原生文件系统
WSL的Linux原生目录(/home/你的用户名路径下)没有跨系统权限问题,操作性能也比挂载目录高3~10倍:
- 在WSL终端执行
cd ~ && mkdir solidity && cd solidity - 执行
truffle unpack MetaCoin即可正常完成项目初始化 - 如果需要在Windows侧用编辑器访问项目,直接在Windows资源管理器地址栏输入
\\wsl$\Ubuntu\home\你的WSL用户名\solidity就能访问所有项目文件
方案2:修改WSL挂载配置适配NTFS目录
如果你一定要把项目存放在Windows挂载目录,可以修改WSL的自动挂载规则:
- 在WSL终端执行
sudo nano /etc/wsl.conf,写入以下配置:
[automount] options = "metadata,umask=22,fmask=11" mountFsTab = false
- 按
Ctrl+O回车保存,Ctrl+X退出nano编辑器 - 关闭所有WSL窗口,在Windows PowerShell/CMD执行
wsl --shutdown重启WSL,之后再重新执行truffle unpack操作即可
方案3:临时兼容性规避
如果上面的方案都不适用,可以先在Linux临时目录初始化再手动迁移:
- 执行
cd /tmp && truffle unpack MetaCoin - 执行
cp -r /tmp/MetaCoin/* /mnt/c/Users/Tobias/desktop/solidity/,跳过.git开头的隐藏文件即可避免权限报错
额外注意事项
你当前使用的Node v17属于非LTS版本,和你安装的Truffle v5.4.19存在已知兼容性问题,如果操作后还有其他报错,可以用nvm切换到Node 16 LTS版本:
nvm install 16 --lts nvm alias default 16 npm install -g truffle
内容的提问来源于stack exchange,提问作者leeheung43
相关产品推荐
相关产品推荐

