添加metadata、umask=022及fmask=111挂载选项后WSL无法运行EXE文件的求助
添加metadata、umask=022及fmask=111挂载选项后WSL无法运行EXE文件的求助
嘿,我一眼就看出问题出在你设置的fmask=111上——这个挂载选项直接剥夺了所有文件的执行权限,而WSL调用Windows EXE文件(比如reg.exe、powershell.exe这些)的时候,恰恰需要保留它们的执行位才能正常运行。
问题根源拆解
umask和fmask是用来控制挂载文件系统时默认权限的掩码:
fmask=111是针对文件的权限掩码,八进制的111对应清除所有用户、组、其他角色的执行权限位- 虽然你可以给部分自己的EXE文件手动
chmod +x添加执行权限,但/mnt/c下的Windows系统自带EXE是挂载的NTFS分区,挂载时的fmask设置会直接覆盖权限,你没法通过chmod修改这些系统文件的权限,所以才会出现有的能跑、有的完全没法执行的情况。
通用解决方案
修改WSL挂载配置
打开WSL的配置文件(如果没有就新建一个):sudo nano /etc/wsl.conf找到
[automount]下的options行,把fmask=111去掉,修改后应该类似这样:[automount] options = "metadata,umask=022"如果你确实需要保留fmask来控制文件权限,那把它改成不影响执行位的值,比如
fmask=011(只清除其他用户的执行权限,保留自己和组的),不过一般来说移除fmask=111就能解决问题。重启WSL让配置生效
切换到Windows的命令提示符或PowerShell,运行:wsl --shutdown然后重新打开WSL终端,再测试运行
wslview https://www.google.com或者直接调用/mnt/c/Windows/System32/reg.exe,应该就能正常执行了。
这样调整后,Windows分区下的EXE文件会恢复默认的可执行权限,同时umask=022还能保证挂载的文件拥有合理的读写权限,完美兼顾你的需求~
备注:内容来源于stack exchange,提问作者user1016976
相关产品推荐
相关产品推荐

