【问题标题】:chmod WSL (Bash) doesn't workchmod WSL(Bash)不起作用
【发布时间】:2018-03-18 12:38:33
【问题描述】:

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

$chmod 644 filename 

【问题讨论】:

  • 您要修改的文件的路径是什么?它是否在诸如“/mnt/c”之类的drvfs挂载上?如果是这样,Unix 权限几乎不会应用于 Windows 文件系统中的文件。它所能控制的只是只读文件属性,可以通过删除每个人的写访问权限来设置,例如chmod 555 filename。隐含地,每个人都将始终具有读取和执行访问权限,因为没有 Windows 文件属性与之对应。
  • MINGW32:/c/Users/joe/working2
  • 您是否也尝试过使用sudo
  • @ifconfig 我在 windows 上使用 GIT 自带的 bash。
  • MSYS 环境是 bash 加上 Unix 中的典型命令行程序,建立在用户模式 ​​Windows API 之上。相比之下,Windows 10 中的 Linux 子系统使用内核驱动程序和直接执行 ELF 二进制文件的 pico 进程,包括 sudo。尽管如此,它仍不能使通过 drvfs 挂载的 NTFS 卷像原生 Linux 文件系统一样工作。诸如chmod 之类的系统调用可以正常工作。本机 Linux 文件系统支持由用于“/”的 lxfs 文件系统提供,该文件系统保存在用户的 %LocalAppData%\lxss 文件夹中的磁盘中,但不适用于 Windows。

标签: bash windows-10 chmod windows-subsystem-for-linux


【解决方案1】:

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

[automount]
options = "metadata"

这可能需要重启 WSL(如使用wsl --shutdown)或主机才能生效。自 2018 年以来,这一直是可能的:

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

[引用:Microsoft Dev Blog]


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

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

...但请注意,该命令仅在会话范围内生效。如果您退出当前 bash,您将丢失您的设置(来源:回答者 Amade)。


参考:

Automatically Configuring WSL

【讨论】:

  • “启用”是多余的。此选项默认为“true”
  • 我必须在保存/etc/wsl.conf 后重新启动我的机器才能进行更改。
  • 需要运行wsl --shutdown
  • 感谢@alex 和@HA3IK;已将此基本上下文编辑为答案。
  • 文件/etc/wsl.conf不存在,所以我创建了它,重启后就可以了。谢谢!
【解决方案2】:

最近对 WSL 进行了更新 (source),可让您更改对文件的权限 (Insider Build 17063)。

你所要做的就是运行:

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

【讨论】:

  • 记得在sudo umount之前检查你的操作系统版本。我的计算机由我的组织管理并锁定在 1709(16299.402)。重新安装时显示wrong fs type, bad option, bad superblock on D:。幸运的是,重新启动 bash 修复了它。
  • 这个解决方案的问题是它以root身份挂载c盘。要拥有我拥有的文件而不是 root,我必须这样做 sudo mount -t drvfs C: /mnt/c -o metadata,gid=1000,uid=1000
【解决方案3】:

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: metadata (chmod\chown) possible for mounted SMB drives?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多