使用Windows 10 上的 Ubuntu 上的 Bash我知道我的主文件夹位于C:\Users\<username>\AppData\Local\lxss\home\
并且所有其他东西也都在那里的某个地方。
当我使用 Windows 资源管理器复制内容时,...\lxss\home
它不会显示在 bash 中。也许是文件系统,也许是权限?好吧,让我\mnt\c\...
通过 bash 从那里复制内容。有效。
现在我只想编辑weirdfile.txt
主目录中的文件。我用 Windows 记事本打开它,编辑它,保存它 - 它从 bash 中消失了。从物理上讲,我仍然可以通过 Windows 资源管理器看到它在文件夹中,但在 bash 中它消失了。没有隐藏。sudo 没有帮助。以管理员身份启动 bash 没有帮助。
重现步骤
C:\Users\<username>\AppData\Local\lxss\home\
使用 Windows 资源管理器将文件夹复制到- 使用以下命令检查主目录Windows 上的 Ubuntu 上的 Bash(重击)
ls -a
- 观察到文件夹不存在
- 使用常规文本文件重复步骤 1-3
- 在 bash 中创建文件夹
mkdir TestFolder
C:\Users\<username>\AppData\Local\lxss\home\
使用 Windows 资源管理器检查- 观察文件夹是否存在
- 对常规文件重复步骤 5-7
touch somefile.txt
somefile.txt
用您喜欢的文本编辑器打开并进行一些更改- 当我们在 bash 中查看时,发现它
somefile.txt
已经消失了 ( )。ls -a
这是怎么回事?请介绍一下虚拟化文件系统,并告诉我如何在 Windows 中处理文件。通过 SSH 进入本地主机并通过 SCP 编辑文件?不用了,谢谢。我可以用 Explorer/Windows 工具处理文件吗?
我可以给你做得更好:
ln -s /mnt/c/Users/<username>/Desktop/weirdfile.txt /~/weirdfile.txt
有效。永远不会消失。我可以使用 Windows 工具处理文件。世界变得更美好了。不幸的是,Windows 上的 Bash 似乎无法理解 Windows 符号链接/硬链接,所以我必须在 Bash 内部对所有内容进行符号链接。
PS:用“ubuntu”和“windows”标记问题感觉很奇怪。
答案1
因此,微软的项目经理 Jack Hammons 链接到了这个优秀的官方资源:https://blogs.msdn.microsoft.com/wsl/2016/06/15/wsl-file-system-support/
问题是我运气很差(上面的链接略有修改):
虽然 [WSL] 文件存储在上述 Windows 目录中的常规文件中,互操作性使用 Windows不支持。如果从 Windows [WSL] 将新文件添加到这些目录中,则它会忽略它。许多编辑器在保存现有文件时还会删除 [用于存储 WSL 元数据的扩展属性],同样导致文件在 WSL 中无法使用。
此外,由于 [WSL] 缓存目录条目,在 WSL 运行时从 Windows 对这些目录所做的任何修改都可能无法准确反映。
所以即使我可以看中的文件/文件夹C:\Users\<username>\AppData\Local\lxss\home\
,我不应该通过 Windows 与它们进行交互。
关于符号链接:
虽然 NT 支持符号链接,但我们不能依赖这种支持,因为 WSL 创建的符号链接可能指向 /proc 之类的在 Windows 中没有意义的路径。
还有一个问题:当从某个地方符号链接文件时,/mnt/c/
一切似乎都可以在 Windows 和 WSL 中正常工作。所以现在我有几个文件夹从我的文档符号链接到我的 WSL 主文件夹。我把事情搞砸了吗?
编辑:Rich Turner 非常友善地将这些信息放在了这里的半官方博客文章中https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/。虽然没有指定,但我的符号链接想法实际上似乎是一种好方法,因为已安装的 NTFS 分区被区别对待。