❞ [有]一种方法可以从 Windows 访问 Ubuntu 文件系统,以便我可以在其他编辑器中进行开发并从 Ubuntu-bash 运行代码吗?
我发现在 Cmd 中我可以做到
subst u: "\\wsl.localhost\Ubuntu-20.04"
PowerShell 直接识别 UNC 路径,因此在 PowerShell 中只需
cd
即可到达该位置。
任何可以打开 Windows 命令提示符的终端程序都应该能够运行 bash(bash.exe 启动 Windows Linux 子系统),因此您不必受困于 command.exe。
Conemu(@anotherfred 提到)或 Cmder 是粉丝的最爱。如果您愿意,也可以使用 Powershell。
您可以从位于 /mnt/c 的 WSL 访问您的 Windows 文件(如果您有 d: 驱动器,则为 /mnt/d 等)。如果您想要执行命令行操作并仍然使用您最喜欢的 Windows 编辑器访问文件,那么这种方法相对有效。
您可以在 Windows 中查看您的 WSL 文件系统:
%LocalAppData%\lxss\rootfs
虽然我不会在 Windows 中搞乱它。
/root 将位于
下%LocalAppData%\lxss\rootfs\root
和
/home 将在
下%LocalAppData%\lxss\rootfs\home
这两个是单独安装的,这样当您删除 WSL 时它们就不会被删除。
自 2017 年底以来发布的 Windows 10 版本(包括 Fall Creators Update 和 Windows Insiders Builds 17063+)支持在同一台计算机上运行多个 Linux 发行版。因此,WSL 必须将每个发行版的根文件系统存储在不同的位置。
根文件系统不再位于
%LocalAppData%\lxss\rootfs
从 Windows 应用商店安装的每个 Linux 发行版都将根文件系统存储在不同的文件夹中:
%LocalAppData%\Packages\<distro folder>\LocalState
<distro folder>
因一种分布而异。例如,以下是我的测试计算机中的<distro folder>
:
CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc
CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc
TheDebianProject.DebianGNULinux_76v4gfsz19hv4
KaliLinux.54290C8133FEE_ey8k8hqnwqnmg
如果您想访问 root 或 home 文件系统,则必须使用相应的文件夹。例如,要转到 KaliLinux 的文件夹,您必须转到:
%LocalAppData%\Packages\KaliLinux.54290C8133FEE_ey8k8hqnwqnmg\rootfs # root
%LocalAppData%\Packages\KaliLinux.54290C8133FEE_ey8k8hqnwqnmg\home # home
LxRunOffline是一个管理WSL Linux发行版的工具。它可用于安装 WSL 发行版或将其移动到计算机的任何文件夹。
您可以使用
lxRunOffline get-dir
获取安装文件夹的路径。 root 位于 rootfs
子文件夹中。
C:\> lxrunoffline list
Ubuntu-18.04
ubuntu-copy
C:\> lxrunoffline get-dir -n Ubuntu-18.04
C:\Users\nnn\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState
C:\> lxrunoffline get-dir -n ubuntu-copy
d:\wsl\installed\ubuntu-copy
如果您有兴趣,可以使用程序获取路径。有关已安装发行版及其配置的信息存储在 Windows 注册表中。
您可以通过
regedit
和以下路径查看信息:
HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss
这里有您安装的不同发行版的所有配置。例如,您可以使用 Powershell 获取默认发行版的基本路径信息。
$WSLREGKEY="HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss"
$WSLDEFID=(Get-ItemProperty "$WSLREGKEY").DefaultDistribution
$DISTROPATH=(Get-ItemProperty "$WSLREGKEY\$WSLDEFID").BasePath
echo "the filesystems are located at $DISTROPATH"
要检查所有已安装发行版的文件系统,您也可以使用 Powershell。
(Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | ForEach-Object {Get-ItemProperty $_.PSPath}) | select DistributionName,BasePath
相反:bash 正在访问 Windows 文件系统,您可以在
/mnt/c
找到该文件系统。您的文件(应该)在您的 Windows 文件系统中,您可以像平常一样编辑它们。
如果您只是不喜欢终端界面,请尝试像conemu(https://conemu.github.io/)这样的东西。对于命令 shell、powershell 或任何您喜欢的 shell 来说,这是一个方便且漂亮的界面。