无法使用打开的文件句柄重命名目录

无法使用打开的文件句柄重命名目录

在我的 Ubuntu 子系统中的 Windows 10 上,当我打开目录中的文件并尝试在该文件打开时重命名该目录时,我无法执行此操作。

例子:

$mkdir demo
$touch demo/test.txt
$CtlZ
$[2]+  Stopped                 vim demo/test.txt
$mv demo demo100
mv: cannot move 'demo' to 'demo100': Permission denied

现在,当我关闭文件时,我可以重命名它。

$mv demo demo100
$ls demo100
test.txt

这似乎是出乎意料的行为。当我在常规 Ubuntu 机器上进行相同的测试时,我能够毫无问题地重命名文件。关于可能导致这种情况的任何想法?

答案1

是的,这是正常的 Windows 行为。在 Windows 下,打开文件会有效地将其锁定在文件系统上并防止其被移动。

重要的是要了解 WSL 不是虚拟机。它是窗口顶部的一个(薄)层,可以像 Posix 一样访问窗口。所以当你在WSL下打开一个文件时,你实际上是在windows下打开它,并受到windows通常的规则的约束。

阅读:

https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux

概述

WSL 提供了 Microsoft 开发的兼容 Linux 的内核接口(不包含 Linux 内核代码),可以在其上运行 GNU 用户空间,例如 Ubuntu、openSUSE、SUSE Linux Enterprise Server、Debian 和 Kali Linux。

更远

硬件和文件系统访问

由于没有硬件模拟/虚拟化(与 coLinux 等其他项目不同),WSL 直接使用主机文件系统

相关内容