我在 Windows 上同时使用 Cygwin 和 WSL(Ubuntu)。我运行了一个在 Cygwin 中创建文件的命令,然后当我在 WSL 中查看同一个文件时,它显示我拥有该文件以及包含该文件的目录,并且我对它拥有所有权限。但是,当我尝试删除它时,我收到权限被拒绝的提示
> sudo rm file1.txt
rm: cannot remove 'file1.txt': Permission denied
> whoami
jeff
> ls -la
total 4
drwxrwxrwx 1 jeff jeff 512 Dec 1 14:55 .
drwxrwxrwx 1 jeff jeff 512 Dec 1 14:55 ..
-rwxrwxrwx 0 jeff jeff 999 Dec 1 14:40 file1.txt
> cd ..
> ls -la
total 0
drwxrwxrwx 1 jeff jeff 512 Dec 1 14:55 .
drwxrwxrwx 1 jeff jeff 512 Dec 1 14:55 ..
drwxrwxrwx 1 jeff jeff 512 Dec 1 14:55 folder1
我尝试过rm
使用和不使用 sudo 来运行、删除包含的文件夹以及放弃对文件和父文件夹的所有权,我还能尝试什么,假设使用 Cygwin 或 Windows 删除文件不是一个选项?
答案1
评论中的信息表明存在一个潜在的重大问题。首先,请记住使用您在评论中提供的信息编辑您的问题。对于任何理解您的问题的人来说,这都是至关重要的信息,应该是问题的一部分,而不是评论。(问题更新后,您可以随意编辑此答案以删除斜体区域)。
现在来谈谈可能出现的问题...
危险!危险!正如@Jeffmagma 在评论中所说,这看起来不像 WSL2。由于该文件暴露在C:\wsl\rootfs
(在 Cygwin 中可见/cygdrive/c/wsl/rootfs
),因此它看起来是 WSL1 文件系统,而不是 WSL2 虚拟驱动器(将显示为ext4.vhdx
)。
这就属于此 Microsoft 警告:
对于 Windows 上的 WSL 来说,有一条硬性规定:
%LOCALAPPDATA%
在任何情况下,都不要使用 Windows 应用程序、工具、脚本、控制台等访问、创建和/或修改文件夹内的 Linux 文件。在 Windows 中创建/更改 Appdata 文件夹中的 Linux 文件可能会导致数据损坏和/或损坏您的 Linux 环境,需要您卸载并重新安装您的发行版!
... 措辞其实有点不对。它引用了“AppData”,但那是默认WSL 安装的位置。
在这种情况下,您似乎已经在 处创建了一个 WSL1 实例C:\WSL
。这完全没有错,但微软的警告仍然适用。尝试使用该路径中的 Windows 应用程序(例如 Cygwin)创建、更新或删除文件几乎肯定会导致问题。
不幸的是,在这种情况下,这听起来很可能会导致文件系统损坏。
为了尝试恢复,我会尝试:
wsl --export
此 WSL1 实例的另一个- 然后将
wsl --import
其放入新实例中。我假设您熟悉此过程,因为它很可能是您C:\wsl\
最初创建实例时所用的方法。我个人会将其添加--version 2
到命令末尾--import
。 - 查看 (a) 问题文件是否存在于新实例中(
export
实际上,它可能已被 剔除),以及 (b) 如果存在,查看是否可以删除它。