Windows 子系统中的 Linux Ubuntu 文件系统根目录在哪里,反之亦然?

Windows 子系统中的 Linux Ubuntu 文件系统根目录在哪里,反之亦然?

我已经在 Windows 10 上安装了 Ubuntu 子系统(在设置中启用功能后),但是 Ubuntu 文件系统根目录位于驱动器的什么位置?

答案1

对于从 Windows 商店安装的 Ubuntu:

您通过商店安装的每个发行版都会安装到该应用程序的 appdata 目录中。例如: C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState - 本希利斯

对于 WSL2,你可以像这样从 Windows(Windows 10 build 18342)访问主目录:

\\wsl$

在 Windows Subsystem for Linux 的早期版本中,Ubuntu 文件系统位于%localappdata%\Lxss(例如C:\Users\Username\AppData\Local\Lxss- 替换用户名使用您的用户名(在 Windows 上)。请参阅有关文件系统支持的 WSL 博客文章

WSL 使用的主要文件系统是 VolFs。它用于存储 Linux 系统文件以及 Linux 主目录的内容。因此,VolFs 支持 Linux VFS 提供的大多数功能,包括 Linux 权限、符号链接、FIFO、套接字和设备文件。

VolFs 用于挂载 VFS 根目录,用作 %LocalAppData%\lxss\rootfs后备存储。此外,还存在一些额外的 VolFs 挂载点,最值得注意的是/root和, 它们分别使用和 /home挂载。这些单独挂载的原因是,当您卸载 WSL 时,主目录不会被默认删除,因此存储在那里的任何个人文件都会被保留。%LocalAppData%\lxss\root%LocalAppData%\lxss\home

警告

使用 Windows 应用程序和工具在 Linux 子系统中创建/修改任何文件都可能导致 Ubuntu 子系统中的数据损坏和数据丢失!(感谢里奇·特纳提出这些警告!)这绝对不是支持的。摘自同一篇博文:

与 Windows 的互操作性

虽然 VolFs 文件存储在上述目录中的 Windows 常规文件中,但不支持与 Windows 的互操作性。如果从 Windows 将新文件添加到这些目录中,则该文件缺少 VolFs 所需的 EA,因此 VolFs 不知道如何处理该文件,只会忽略它。许多编辑器在保存现有文件时也会删除 EA,这同样会使该文件在 WSL 中无法使用。


您的 Windows 文件系统位于/mnt/cBash shell 环境中。

在此处输入图片描述

来源:达斯汀·柯克兰的博客极客

答案2

自 Bash 最初推出以来,这种情况似乎已经发生了变化,并且不适用于 Windows Store 的发行版,或者可能并不适用于所有系统,因为我的主目录位于另一个位置:

%localappdata%\lxss\home\{username}

或者:

C:\Users\{user}\AppData\Local\lxss\{username}

{user}您的 Windows 用户名在哪里?{username}您的 UNIX 用户名是在安装期间设置的。

因此根目录将是:

%localappdata%\lxss

请注意,从目录中可以看到根目录,但 Windows 资源管理器可能无法看到%localappdata%它。无论如何,您都应该能够通过在资源管理器的“地址栏”中输入它来访问它。

答案3

如果您从 MS Market 安装 Linux:

他们将发行版放在以下位置:

$ cat /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss/\{861c29b4-ebe2-49a5-8a22-7e53a27934a0\}/BasePath
C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

默认发行版定义为:

bash# cat /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss/DefaultDistribution
{861c29b4-ebe2-49a5-8a22-7e53a27934a0}

Linux根源更深:

c:/Users/user/AppData/Local/Packages/46932SUSE.openSUSELeap42.2_022rs5jcyhyac/LocalState/rootfs

PS. 我使用 Cygwin 来探索注册表项。

如果使用 PowerShell 实现相同目标,则命令将是:

# obtain the value of the ID of the default Linux distribution (and store it in a variable to avoid escaping characters issues):
$DEFAULT_LXSS_ID = (Get-ItemPropertyValue -Path REGISTRY::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\ -name DefaultDistribution)

# which will have a value like:
echo  $DEFAULT_LXSS_ID
{bde539d6-0c87-4e12-9599-1dcd623fbf07}

# display the directory containing the rootfs Windows directory (mapped to the / Linux directory)
Get-ItemPropertyValue -Path REGISTRY::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\$DEFAULT_LXSS_ID -name BasePath | Format-List -property "BasePath"
%LocalAppData%\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState

附注。https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/

答案4

对我而言唯一有用的是%localappdata%\lxss\home\{username},其中{username}是您在安装过程中提供的 BASH 用户名。出于某种原因,在显示隐藏文件夹后,lxss 拒绝出现在 中C:\Users\WINDOWS-USER\AppData\Local\,并且提供C:\带有 windows 和 BASH 用户名的完整路径也不起作用。

并且请为可运行的功能创建桌面快捷方式。

相关内容