答案1
简短回答:
通过以下方式打开对 Windows 驱动器的 WSL 元数据支持:
sudo -e /etc/wsl.conf
并添加:
[automount]
options = "metadata"
但请阅读以下内容...
几点说明:
您说您处于“主目录”中,但情况似乎并非如此。这可能只是术语上的混淆,但也可能代表一个真正的问题。您在屏幕截图中显示的目录是“Windows轮廓”(有时称为“Windows 主页”)。这应该不是与您的 WSL/Linux“主目录”相同。
在 WSL 中,尝试以下命令:
echo $HOME wslpath $(powershell.exe -c '$env:USERPROFILE')
那些应该是不同的目录。如果不是,那么你可能有意将 WSL/Linux 主目录更改为与 Windows 用户配置文件相同。这不是一个好主意。如果 WSL 用户的主目录位于 Linux 文件系统上,WSL 会更好地工作。
不过,假设它们是不同的,那么下一个问题就是你提到通过“更改权限”
chown
。为清楚起见,chown
更改所有权.chmod
更改权限。无论如何,对于更改 Windows 驱动器上文件的权限或所有权,答案几乎是一样的。让我们从权限开始,因为这正是您要问的。
重要的是要意识到 WSL 对 Windows 驱动器的权限控制非常有限。在 WSL 默认(无)元数据设置的情况下,你唯一能做的就是通过删除所有写权限将 Windows 文件设置为只读。 换句话说:
cd $(wslpath $(powershell.exe -c '$env:USERPROFILE' | tr -d '\r')) # Should change to the directory you mention in your question touch afile ls -l afile chmod u-x afile ls -l afile # no change chmod o-w afile ls -l afile # no change chmod 644 afile ls -l afile # no change chmod 444 afile ls -l afile # All write permissions are removed, and the file is actually read-only to your Windows user sudo chown root afile ls -l afile # no change chmod 644 afile ls -l afile # File appears as 777 again to WSL, and the read-only attribute in Windows is removed
metadata
将选项添加到后/etc/wsl.conf
,退出 WSL,wsl --terminate <distro_name>
从 PowerShell 运行,然后重新启动 WSL。然后,WSL 会将其他元数据应用到 Windows 驱动器,这样您就可以设置LinuxWindows 文件的权限。更改 Linux 权限仍将不是影响 Windows 权限,除了上面提到的只读情况之外。
也就是说,WSL 将尊重这些权限。例如:
# Assuming same file and directory above rm afile touch afile ls -l afile # File is created with default umask 022: -rw-r--r-- chmod u-w afile ls -l afile # -r--r--r-- and Windows read-only chmod +x afile ls -l afile # -r-xr-xr-x, still read-only to Windows chmod +w afile ls -l afile # -rwxr-xr-x, no longer read-only to Windows sudo chown root afile ls -l afile # root is owner sudo rm afile
不过,如上面链接的 Microsoft 权限文档中所述,请记住,您永远无法添加普通 Windows 用户无法添加的权限。例如:
# From the same user profile directory cd .. sudo chmod +r Administrator # chmod: changing permissions of 'Administrator': Permission denied