下一次Windows更新将很快到来,我们将给WSL带来激动人心的更新!包括在Windows中访问Linux文件系统,以及改进在命令行中管理和配置发行版的方式。
过去,在Windows中创建和更改Linux文件会导致文件丢失或数据损坏。这是一项被高度要求和期待已久的功能。我们自豪地宣布,您现在可以在Windows中轻松访问Linux发行版中的所有文件。
开始使用此功能的最佳方式是在文件资源管理器中打开Linux文件!为此,请打开您最喜欢的发行版,确保您当前的文件夹是您的Linux主目录,然后键入:
explorer.exe
这将打开一个文件资源管理器窗口,位于Linux发行版内部。
从这里,你可以访问你想要的任何Linux文件,就像通过文件浏览器访问任何其他文件一样。这包括一些操作,例如:将文件拖动到其他位置,复制和粘贴,甚至是有趣的场景,比如使用上下文菜单在WSL目录中打开VSCode!
使用此功能时,您会注意到发行版文件通过以下路径展示: \wsl$<running_distribo_name>。这是Windows访问每个发行版内部文件的方式(您可以在下一节了解详细信息!)WSL团队正在积极研究如何在文件资源管理器中提高Linux文件的可发现性。
WSL主要是一个命令行工具,因此当然,这个特性也适用于命令行。您可以通过访问\wsl${distro name}来找到发行版的文件,其中{distribo name}是正在运行的发行版的名称。以下是使用PowerShell访问Debian的情况。
简而言之: 9P协议文件服务器处理文件相关请求,Windows充当客户端。
我们已经修改了WSL初始化守护程序,以包含9P服务器。此服务器包含支持Linux元数据的协议,包括权限。有一个Windows服务和驱动程序充当客户端,与9P服务器(运行在WSL实例内部)对话。客户端和服务器通过AF_UNIX套接字进行通信,因为WSL允许使用AF_UNIX在Windows应用程序和Linux应用程序之间进行互操作,如本文所述。
这是一个新特性,它的某些部分可能无法完美工作。在使用此功能时,我们想让您了解一些已知问题:
目前,发行版文件只能在发行版运行时从Windows访问(我们的目标是在将来的更新中增加对非运行发行版的支持)
由于9P文件服务器在每个发行版内部运行,因此只有在该发行版运行时才能访问。该团队正在寻找帮助解决这一问题的方法。
访问Linux文件被视为与访问网络资源相同,任何访问网络资源的规则仍然适用
例如:当使用CMD时,cd \wsl$Ubuntuhome将不起作用(因为CMD不支持UNC路径作为当前目录),但是copy \wsl$Ubuntuhomesomefile.txt C:dev将起作用
旧规则仍然适用,你不应该在AppData文件夹中访问你的Linux文件!
如果你试图通过AppData文件夹访问你的Linux文件,你会绕过使用9P服务器,这意味着你将无法访问你的Linux文件,并且你可能会破坏你的Linux发行版。
我们的团队在听取您的反馈方面投入了巨大的精力,事实上,这整个功能是基于我们伟大的社区反馈而创建的!请将你发现的任何问题提交在Github页面:https://github.com/Microsoft/WSL,我们将尽最大努力解决这些问题。
感谢社区帮助WSL成为一个了不起的工具!
通过将命令整合到wsl.exe并添加更多的命令行功能,我们还在最新的更新中改进了命令行体验。现在,您可以使用wsl.exe来执行配置和控制机器上的WSL所需的所有必要命令。你总是可以通过运行wsl.exe --help来检查你可以从wsl.exe运行的所有命令。
我们还添加了一些新命令,这些命令将在使用wsl.exe时为您提供更多功能。
现在,您可以以不同的用户运行命令,终止正在运行的发行版,甚至可以导出和导入不同的发行版!导出发行版是通过传入--export作为参数来实现的,并将输出当前发行版的tar文件。例如,您可以使用此功能与他人共享您的发行版设置。此外,如果你传入--import作为参数,你可以导入一个tar文件,其中包含Linux发行版的根文件系统,这允许你导入你想要的任何发行版,以及你想要的任何配置。
这是我们添加到wsl.exe的命令的完整列表。
--user, -u <UserName>
以指定用户的身份运行
--export <DistributionName> <FileName>
将发行版导出到tar文件。
文件名可以是–用于标准输
--import <DistributionName> <InstallLocation> <FileName>
将指定的tar文件作为新发行版导入。
文件名可以是–用于标准输入
--terminate, -t <DistributionName>
终止发行版
wslconfig.exe内部存在的命令已经添加到wsl.exe,让你可以更容易地配置发行版。我们的目标是将您与WSL的交互方式整合为一个二进制文件。
--list , -l
列出计算机上可用的所有发行版
还可以包含其他选项:
--all
列出所有发行版,包括当前正在安装或卸载的发行版
–running
仅列出当前正在运行的发行版
--setdefault, -s <DistributionName>
将发行版设置为默认值
--unregister <DistributionName>
注销发行版
--upgrade <DistributionName>
将发行版升级为WslFs文件系统格式
Windows控制台团队还做了一些改进,您会在使用WSL时注意到这些改进。控制台团队将很快发布Windows 10版本1903中的新特性的文章。保持关注!
英文原文:https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/
译者:困顿少年 宁子谦