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


90

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

屏幕截图应说明。

文件夹: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主目录中吗?


是否可以在Linux环境下挂载Windows HDD?这样,它应该实时显示所有文件...(甚至只显示Cygwin主目录)
Hastur

3
好主意,但是很遗憾,这些文件不可见。解决该问题的方法是通过Bash.exe将文件从Windows目录复制到Linux子系统目录中。这样做需要cp -r --no-preserve=all 删除先前的权限。但是,如果要进行重大更改,则不能使用Windows应用程序在LinuxSubSystem中编辑文件,而必须在Windows目录中对其进行编辑,然后将其复制过来。现在,我知道了这一点,但它可行,但给人的印象是Linux子系统比隔离OS更本地化/集成到Windows中
Dave Hamilton


如果从Windows应用商店安装发行版,则文件系统位于%LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs
伊恩·坎普

Answers:


101

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

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

确保定期更新Windows版本,因为它们似乎在解决每个版本的很多问题,尤其是围绕符号链接和Linux / Windows之间的FS边界的问题。


1
你是对的,我想我有点枪了。虽然Bash可以访问Windows文件,但Windows无法将文件复制到Linux子系统目录中。(它可以复制,但是Bash保留了文件权限,因此Bash无法看到它们)安装了bash时,尽管我最合逻辑的做法是将项目从一个Linux环境移至另一个Linux环境(试图将Cwygin装箱),然后这让我开始头痛。现在,我已经将Bashrc配置为具有我以前的Linux环境的起始目录,并且可以从那里开始工作。感谢您的答复。
戴夫·汉密尔顿

等一下,您如何显示/ mnt / d?例如,当我通过MTP连接电话时,它会显示在“ This PC \ PhoneName”之类的路径下,但没有与之关联的驱动器号。
迈克尔

如果没有斜杠,则符号链接有效。另外,您需要在文件系统的Windows端具有文件才能执行诸如在本地运行Django项目并在浏览器中访问它们的任务
Zags

但是当我修改Windows文件时linux文件不会更新吗?!?!
BugWhisperer

20

@ 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虚拟主机设置为该路径,即可开始使用。


它实际上并没有同步...除非我每次必须重新启动服务器?
BugWhisperer

@Anthony是符号链接,因此您无需为此重新启动服务器。实际上,这不是同步的,它只是指向该文件夹/路径。
Riz

1
我发现了问题。这是因为CSS文件的名称中带有破折号,例如css-file.css。我已经在这里发布了有关此问题的信息
BugWhisperer

9

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

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

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

HTH。


1

我需要在Windows 10上使用PyCharm / eclipse,而运行/ testind则需要Linux环境。

我遇到了从git签出到Linux Sub System的问题,并没有立即看到使用PyCharm文件进行编辑的问题;

devcode=/DevCode

if [ ! -L $devcode ]; then
     ln -s /mnt/c/DevCode /DevCode 
fi

我在Ubuntu区域的.bashrc中具有以上内容。它正在无缝运行。我可以编辑Windows并在Ubuntu中运行/测试而没有任何问题。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.