Windows Linux 子系统 - 在 Ubuntu 之外访问文件

Dav*_*ton 132 bash windows-10 windows-subsystem-for-linux

为什么,例如,当我从 Windows 中创建文件时,在 Windows 10 (bash.exe) 的 Linux 子系统下看不到它

屏幕截图应该解释。

文件夹:OMG 是从 Windows 资源管理器中创建的。文件夹 OMGbash 是从 Linux 子系统 bash.exe 创建的

在 bash.exe 之外创建文件夹 OR 文件时,无论权限和所有权如何,我都看不到它。

为了显示我必须使用 Cygwin 来显示文件权限的信息,我还更改了权限以查看文件夹是否会出现。(底部的两个命令窗口)

显示文件夹、bash.exe 和 Cygwin 权限的屏幕截图:

在此处输入图片说明

我正在尝试将所有 Cygwin 脚本移至 Linux 子系统, 我不想重新创建每个文件,然后必须使用 bash 复制和过去,然后重新格式化,然后使用 Dos2unix(非常冗长)。

在 GitHub 上为 Linux 子系统找到了这个:

根据对其他票证的讨论,不支持从 Windows 直接复制到 Linux 子系统。AppData 下的某个目录(我忘了在哪里)似乎包含 WSL 文件系统的文件。但是如果你把新文件放在那里,或者修改现有文件,你的更改不会在 WSL 中正确反映。

我最好的猜测是 Linux 需要存储与 Windows 不同的关于其文件的元数据(以及更多缓存信息等,因为它的磁盘缓冲模型也不同),并且目前这是通过存储结构的主副本来实现的Linux 文件系统在某种类型的数据库中,并且只使用 Windows 文件系统作为该数据库的方便 BLOB 存储。

如果你真的需要这样做,一个解决方法是编写一个拖放 .bat 脚本或类似 bash.exe -c "mv %1 /home/$USER/" 的脚本。(您可能必须使用 sed 和 tr 做一些巧妙的工作,才能将 %1 转换为有效的 WSL 路径。)

或者 - 您可以将文件放在 Windows 目录中,并在 WSL 中执行“cd ~; ln -s /mnt/c/path/to/my/files”以使它们看起来在您的 WSL 主目录中?

小智 165

我不确定我是否误解了您的问题,但是您的 ubuntu bash(右上角的窗口)应该可以访问基于 Windows 的磁盘/mnt. 例如,在我的机器上/mnt/c/Users/Scott/Desktop是我的 Windows 桌面,我可以从 vi 读取/写入文件,例如。我不相信相反的情况。也就是说,我认为您无法从 Windows 资源管理器中探索您的 bash 世界。

作为开发人员,我一直在做的是在我的 d: 上托管项目,并将基于 linux 的工具指向该/mnt/d/projects/someproject/文件夹。

确保你定期更新你的 Windows 构建,因为它们似乎正在修复每个构建的很多问题,尤其是在 Linux/Windows 之间的符号链接和跨越 FS 边界方面。


Riz*_*Riz 30

@scottt732 回答得很漂亮。

对于在 Windows 中工作并希望在 Linux 子系统中快速访问这些文件的开发人员来说,这只是一个提示。您可以使用符号链接

例如,如果您正在 中处理一个项目d:/projects/web-project,您可以在该位置创建一个符号链接,/var/www/web-project并且您在 Windows 中更改的所有文件都可以在 Linux Bash 中随时访问。

为此,您将使用这样的ln命令

ln -s  /mnt/d/projects/web-project  /var/www/web-project
Run Code Online (Sandbox Code Playgroud)

上面这行/mnt/d是你在 Windows 上的 d 驱动器。将您的 Apache 虚拟主机设置到此路径,您就可以开始了。


Ric*_*ner 13

我们建议您不要使用 Windows 应用程序复制/创建/更新 Linux 文件

相反,将c:\dev\project要使用 Windows 工具编辑文件和/或使用 Linux 工具/运行时/平台(例如,通过/mnt/c/dev/project)构建/测试/运行的文件存储在 Windows 文件系统(例如)中。

在特定情况下,如果你想你的Cygwin的文件复制到猛砸,然后打开Bash和复制从Cygwin的文件夹中的文件放在C:成~/,这样的:cp /mnt/c/Users/dave/Documents/Cygwin/* ~/

哈。