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

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

为什么当我在 Windows 中创建一个文件时,却无法在 Windows 10 中的 Linux 子系统 (bash.exe) 下看到它

截图应该可以解释。

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

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

为了显示信息,我不得不使用 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 主目录中?

答案1

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

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

确保定期更新 Windows 版本,因为它们似乎在每次构建时修复很多问题,尤其是围绕符号链接和跨越 Linux/Windows 之间的 FS 边界的问题。

答案2

@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

上面一行/mnt/d是 Windows 上的 d 盘。将 Apache 虚拟主机设置为此路径,即可开始使用。

答案3

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

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

在您的特定场景中,如果您想将您的 Cygwin 文件复制到 Bash,那么打开 Bash 并将文件从 C: 上的 Cygwin 文件夹复制到 中~/,如下所示cp /mnt/c/Users/dave/Documents/Cygwin/* ~/:)

嗨嗨。

答案4

我也需要在 WSL 和 win10 之间复制文件。我最终在 Ubuntu 安装上启用了 sshd,这样我就可以从 win10 ssh 进入 Linux。然后我使用 winscp 来回复制文件。这不是最佳选择,但我并不经常复制文件。我试图找到我用来启用 sshd 的帖子,但找不到它。

相关内容