更新:

更新:

我正在从 Windows 运行 Ubuntu。

当我从 Windows 创建一个名为newFolder根目录的文件夹时C:\Users\myuser\AppData\Local\lxss\root\Newfolder,当我从 Bash 运行时,ls我看不到刚刚创建的新文件夹。

我该如何修复这个问题,以便我可以从 Windows 创建文件夹和文件,然后从 Bash 访问它们?

答案1

更新:

从 Windows 10 版本 1903 开始​​,可以使用 访问 Windows 中的 Linux 文件\\wsl$\。因此,您可以explorer.exe .从 bash 运行或\\wsl$\直接在资源管理器的地址栏中输入

Windows 10 版本 1903 中的 WSL 有哪些新功能?

再次提醒你一定不能通过 AppData 文件夹访问您的 Linux 文件!

对于 Windows 10 的旧版本,请参见下文


WSL 根文件系统中的 Linux 文件是使用存储在 NTFS 扩展属性中的 POSIX 权限专门创建的。您可以通过运行fsutil file layout lxss\root并注意$EA溪流在那里。如果你直接从 Windows 创建文件,你会搞砸一切,因为 win32 应用程序对 Linux 及其文件元数据一无所知

例如,当您使用 Windows 应用程序/工具打开、创建和/或修改发行版根目录下的文件时,就会出现问题:由于该文件是使用 Windows 工具创建的,因此该文件不会有任何 Linux 文件元数据(例如权限、所有者、访问/更新时间戳等)。因此,对于 Linux(仅接收 Linux 文件元数据),该文件可能会被报告为空,甚至可能不存在,或者可能有一些元数据,但元数据可能无法反映文件的详细信息,导致文件的内容被损坏

因此,微软大胆警告称

在任何情况下都不要使用 Windows 应用程序、工具、脚本、控制台等创建和/或修改 Linux 文件。

在 Windows 创建/更改 Linux 文件可能会导致数据损坏和/或损坏您的 Linux 环境,需要您卸载并重新安装您的发行版!

不要使用 Windows 应用和工具更改 Linux 文件

仅与 Linux 相关的文件应仅从 WSL 创建。如果你想创建可在两个系统上访问的文件,请创建它们WSL 根目录之外并通过挂载点从 WSL/mnt访问/mnt/drive/path

如果要在 Windows 文件系统上创建文件但保留大小写区分,则使用

fsutil file setCaseSensitiveInfo <directory name> enable

也可以使用以下命令检查该标志fsutil file queryCaseSensitiveInfo <directory name>

也可以看看如何从 Windows 10 WSL 访问 linux/Ubuntu 文件?

答案2

您无法在 Ubuntu 中创建文件夹并从 Windows 访问它们。但您可以做相反的事情。

您可以通过 访问 Windows 驱动器/mnt。如果这样做,ls /mnt您将看到所有驱动器。因此 /mnt/c 是 C 驱动器的路径。同样,/mnt/c/Users/username/Desktop可以让您在 Bash 中访问桌面。

因此,只需使用 Bash 到达所需路径并访问 Windows 文件和文件夹即可。有关快速访问 Windows 文件的更多详细信息,请使用符号链接,详细信息请参见找到这里

答案3

颠倒你的思维:如果你想使用 Windows 应用程序和工具创建文件,并从 Bash 访问它们,那么在你的 Windows 文件系统中创建这些文件等,并从 Bash 访问/复制它们。

下面是在 PowerShell 中创建文件的示例,然后调用 Bash 将创建的文件复制到主文件夹,然后调用 bash 写入文件内容:

PS C:\dev\temp> Set-Content ./hello.txt -Value "Hello, World!" -Encoding ASCII
PS C:\dev\temp> cat .\hello.txt
Hello, World!
PS C:\dev\temp> bash -c "cp /mnt/c/dev/temp/hello.txt ~/"
PS C:\dev\temp> bash -c "cat /mnt/c/dev/temp/hello.txt"
Hello, World!

嗨嗨。

相关内容