在Windows Subsystem for Linux开发环境中编辑文件


23

适用于Linux的Windows子系统(WSL)可以很好地使大多数命令行Linux工具可用,并且无需修改即可在Windows上运行。但是,如果有人想要

  • 使用Linux工具链构建项目,而该工具链 没有受支持的Windows等价物(Ruby,Node等)
  • 使用基于Windows的GUI编辑器(例如Visual Studio代码)编辑文件。

问题是Windows应用程序无法修改虚拟lxss文件系统中的文件。直接修改这些文件会导致各种问题。

因此,在使用WSL进行开发时,似乎只有两个次优的选择:

  1. 将项目存储在lxss(/home/foo)下。正常的工具链可以正常工作。但是,编辑仅限于基于终端的Vim / Emacs或可以在janky X服务器下运行的任何程序,这比Windows上运行的本机编辑器的平滑度低。

  2. 将项目存储在Windows文件系统(/mnt/c/Users/foo)下。现在,任何基于Windows的编辑器都可以用于开发。但是,基于Linux的工具链非常脆弱,因为它不适合在“网络驱动器”上使用,并且可能导致文件监视数据库出现问题。

有什么办法可以在这两个方面都得到最好的利用-即能够使用本机Windows应用程序进行编辑,但仍可以像通常在本地驱动器上那样使Linux工具链正常工作?

Answers:


4

Microsoft最近添加了对此的全面支持,并且应该在2019年4月(19H1)更新中普遍可用。准备就绪后,只要运行Linux发行版,9P服务器就会在后台运行。9P服务器将能够处理Linux文件系统元数据,而Windows将能够将其视为网络驱动器,从而可以安全地访问它。您可以在https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/中阅读有关它的信息。

使用此新功能,只要您通过9P服务器,就可以从Windows安全地访问Windows和Linux文件系统文件。这将在WSL内部进行本地处理。例如,从WSL命令行中,您可以键入code /mnt/c/Users/username/src/windows-file.txt以VS Code打开Windows文件,或键入code /home/username/src/linux-file.txt以VS Code 打开Linux文件。

如果您不属于Windows Insider计划的一部分,则将无法访问此程序,因此您仍然必须使用旧方法,例如wslpath。

wslpath将在Windows和Linux样式的路径之间转换,因此您可以从WSL命令行轻松打开Windows文件。根据https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689,它将拒绝转换Linux文件系统路径(即%AppData%\ lxss),因为如果没有9P,从Windows修改这些文件是不安全的。这意味着您无法打开/home/username/src/linux-file.txt,但可以使用code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)"

过去,有许多第三方工具可以执行相同的转换,但是wslpath是本地执行的-实际上,这ls -l /bin/wslpath表明它只是/ init的链接。


@alex wsltools可以将Linux路径转换为其Windows等效路径。这样,您可以从Linux命令行打开Windows程序,并告诉它打开Windows文件系统上的文件。
莎恩·劳伦斯

不要这样 blogs.msdn.microsoft.com/commandline/2016/11/17/…。您能提供安全的参考吗?
亚历克斯(Alex)

@alex感谢您提出来。这是一个很好的澄清点。您共享的链接(这也是OP的问题)告诉您不要从Windows打开Linux文件系统中的文件(即,不要使用Windows应用程序更改%AppData%\ lxss下的内容)。我的回答和我以前的评论都描述了如何从WSL命令行在Windows程序中打开Windows文件(例如,从其WSL路径“ / mnt / c / Users /打开“ C:\ Users \ Username \ src \ example.txt”)用户名/src/example.txt”)。还有一种新方法问世。我更新了答案以显示区别和新方法。
Shane Lawrence

Shane,如果要使用Windows二进制文件编辑Windows文件,使用WSL有什么意义?为什么不只使用Windows?
亚历克斯

好消息:WSL现在可以编辑Win10 1903的Linux文件而不会出现问题:devblogs.microsoft.com/commandline/… “过去,在Windows中创建和更改Linux文件会导致文件丢失或数据损坏。我们非常自豪地宣布,您现在可以从Windows轻松访问Linux发行版中的所有文件。”
KERR

1

我敢肯定,比我聪明的人已经看过这个问题了。但我会回答。老实说,我相信答案是否定的。除了您提到的(我知道的)之外,还有一种更好的方法来兼顾两者。

我确定这不是任何人想要的答案,但我认为这是正确的答案。我知道微软正在努力使它变得更平滑,但是还不存在。


而且仍然不是。
雨果·德·亨里格

0

在2018年上半年,Microsoft发布了WSL的一些改进,以解决其中的一些问题:

这些都不能完全解决我最初提出的问题,但是它们可以在某些特定情况下提高可用性。


谢谢!保持更新。如果它让我“安全地”使用我最喜欢的GUI编辑器来选择文件,我什至会没事,我可以在没有适当的构建工具集成的情况下生存(可以从控制台完成)。只要临时将文件“ rsync-ing”到本地Windows副本,就可以了,只要它是透明完成的。我正面临一个令人烦恼的问题,那就是编辑和跟踪CLI中的所有文件太困难了(至少对我来说),我真的只想“在Windows上完成所有工作,将代码“发送/复制”到WSL ,运行工具存在。
丹M.

0

如果要运行linux命令并使用Windows编辑器进行编辑。您可以将源代码(要编辑和测试)保存在文件系统中的某个位置(例如c:\ source \),然后通过/ mnt / c / source在Linux控制台中进行访问。希望这可以帮助。


0

现在Visual Studio Code支持(我正在使用)。“ WSL扩展名”,使您可以从Linux位置执行CRUD(创建,读取,更新,删除)文件/文件夹。尽管我仍在努力为原子设置相同的设置,但这是我选择在Linux平台上进行Rails应用程序开发的编辑器。

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.