chmod WSL(Bash)不';行不通

chmod WSL(Bash)不';行不通,bash,windows-10,chmod,windows-subsystem-for-linux,Bash,Windows 10,Chmod,Windows Subsystem For Linux,在Windows10上运行bash时,下面的简单语法在我使用SSH连接到Web服务器时有效,但在我退出并在本地计算机上时无效。它没有给我一个错误,但我可以看到权限是不变的。我必须检查我是否被设置为计算机管理员。这是一个错误,还是本地操作系统是windows的结果?如果是后者,如果像这样的常见操作不起作用,我会质疑在windows上使用bash的价值 $chmod 644 filename 最近对WSL()进行了更新,允许您更改对文件的权限(Insider Build 17063) 您所要做的

在Windows10上运行bash时,下面的简单语法在我使用SSH连接到Web服务器时有效,但在我退出并在本地计算机上时无效。它没有给我一个错误,但我可以看到权限是不变的。我必须检查我是否被设置为计算机管理员。这是一个错误,还是本地操作系统是windows的结果?如果是后者,如果像这样的常见操作不起作用,我会质疑在windows上使用bash的价值

$chmod 644 filename 

最近对WSL()进行了更新,允许您更改对文件的权限(Insider Build 17063)

您所要做的就是运行:

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

要启用更改文件所有者和权限,您需要编辑
/etc/wsl.conf
并插入以下配置选项:

[automount]
options = "metadata"
这可能需要重新启动WSL(例如使用
WSL--shutdown
)或主机才能生效。自2018年以来,这是可能的:

现在可以使用chmod/chown设置文件的所有者和组,并在WSL中修改读/写/执行权限。您还可以创建特殊文件,如FIFO、unix套接字和设备文件。我们在DrvFs中引入了新的装载选项,用于将权限投射到文件上,同时在文件和文件夹上提供新的Linux元数据

[引用:]


您还可以使用以下命令临时重新安装驱动器:

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata
…但请注意,该命令仅在会话范围内生效。如果您退出当前的bash,您将丢失您的设置(信用:answereramade)


参考:


Amades和Chaos的答案都是正确的。 但它仅适用于本地驱动器,不适用于映射的网络驱动器。Z:是我的一个网络驱动器。在
/mnt/c/Users/xxx/
上执行相同的操作可以正常工作

$sudo mount -t drvfs Z: /mnt/z -o metadata
$touch test
$chmod +w test
 chmod: changing permissions of 'test': Operation not permitted

这是一个已知问题,请参见

您试图修改的文件的路径是什么?它是否安装在drvfs支架上,如“/mnt/c”?如果是这样,Unix权限很难应用于Windows文件系统中的文件。它所能控制的只是只读文件属性,可以通过删除每个人的写访问权限来设置该属性,例如
chmod 555 filename
。隐式地说,每个人都将始终具有读取和执行权限,因为没有与之对应的Windows文件属性。MINGW32:/c/Users/joe/working2您是否也尝试过使用
sudo
?@ifconfig我在Windows上使用GIT附带的bash。MSYS环境是bash加上Unix中的典型命令行程序,基于用户模式Windows API构建。相比之下,Windows 10中的Linux子系统使用内核驱动程序和pico进程,直接执行ELF二进制文件,包括sudo。但是,它不能使通过drvfs装载的NTFS卷像本机Linux文件系统一样工作。诸如
chmod
之类的系统调用工作正常。本机Linux文件系统支持由用于“/”的lxfs文件系统提供,该文件系统将持久保存到用户的
%LocalAppData%\lxss
文件夹中的磁盘上,但不用于Windows。请记住在
sudo umount
之前检查您的操作系统版本。我的计算机由我的组织管理,并锁定在1709(16299.402)。当重新安装时,它会显示
错误的fs类型、错误的选项、D:
上的错误超级块。幸运的是,重新启动bash修复了它。我使用了
enabled=true
而不是
enable=true
“enabled”是多余的。默认情况下,此选项为“true”。保存
/etc/wsl.conf
后,我必须重新启动计算机才能进行更改。需要运行
wsl--shutdown
谢谢@alex和@HA3IK;将这一重要背景编辑成答案。