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

Jul*_*uly 513 windows-subsystem-for-linux

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

sou*_* c. 579

对于从 Windows 商店安装的 Ubuntu:

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

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

\\wsl$
Run Code Online (Sandbox Code Playgroud)

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

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

VolFs 用于挂载 VFS 根目录, %LocalAppData%\lxss\rootfs用作后备存储。另外,一些附加的volfs的安装点存在,最显着/root/home其使用安装%LocalAppData%\lxss\root%LocalAppData%\lxss\home分别。这些单独挂载的原因是当您卸载 WSL 时,默认情况下不会删除主目录,因此将保留存储在那里的任何个人文件。

警告

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

与 Windows 的互操作性

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


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

在此处输入图片说明

来源:Dustin Kirkland 的博客howtogeek

  • Lxss 隐藏在我的文件系统中......引起了一些令人恼火的一两分钟的头疼。现在我已经创建了一个快捷方式,但我似乎仍然无法取消隐藏它。 (14认同)
  • @souravc 能否请您在答案顶部添加一条重要注释,强烈建议不要使用 Windows 应用程序和工具在 LXSS 中创建/修改任何文件:如果您这样做,数据损坏和丢失的可能性很大! (9认同)
  • 请阅读上面提到的帖子:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/。从 WSL 访问 Windows 文件系统是安全的,这就是我们将您的驱动器安装在 `/mnt/&lt;drive&gt;/` 下的原因,但从 Windows 访问 Linux 文件系统(目前)并不安全,这就是为什么我们不提供轻松访问的原因到发行版文件系统。 (8认同)
  • 由于我的位置不同,因此系统之间的位置似乎发生了变化或不同。我已经在下面发布了我的位置。 (4认同)
  • @Ogaday 您无法使用属性窗口取消隐藏它,因为它被标记为系统目录。您可以使用 `attrib -s -h lxss` 取消隐藏它,这也会取消将其标记为系统目录。 (3认同)
  • 我不明白。如果我不能安全地修改 Windows 工具中的文件,那么在 Windows 中运行它有什么意义?cygwin 似乎仍然优于那个...... (3认同)
  • 好主意。我在我的主文件夹中创建了一个从 `dev` 到 `/mnt/c/dev` 的符号链接,以便于访问我的开发项目。 (2认同)

Nic*_*n16 54

自从 Bash 最初被引入以来,这似乎已经发生了变化,并且不适用于来自 Windows 应用商店的发行版,或者它可能对所有系统都不一致,因为我的主目录位于另一个位置:

%localappdata%\lxss\home\{username}
Run Code Online (Sandbox Code Playgroud)

或者:

C:\Users\{user}\AppData\Local\lxss\{username}
Run Code Online (Sandbox Code Playgroud)

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

所以根目录将是:

%localappdata%\lxss
Run Code Online (Sandbox Code Playgroud)

请注意,根目录在 Windows 资源管理器中可能不可见%localappdata%。您应该可以通过在资源管理器的“地址栏”中输入它来访问它。

  • 请注意,即使启用了隐藏文件夹视图,此文件夹 (lxss) 也没有出现在我的 Windows 资源管理器中 AppData\Local 文件夹列表中。我必须手动将文件夹 lxss 添加到资源管理器栏中才能访问此处的文件,例如将文件夹“url”编辑到那里 (8认同)

gav*_*koa 14

如果您从 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
Run Code Online (Sandbox Code Playgroud)

默认发行版定义为:

bash# cat /proc/registry/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss/DefaultDistribution
{861c29b4-ebe2-49a5-8a22-7e53a27934a0}
Run Code Online (Sandbox Code Playgroud)

Linux root 更深:

c:/Users/user/AppData/Local/Packages/46932SUSE.openSUSELeap42.2_022rs5jcyhyac/LocalState/rootfs
Run Code Online (Sandbox Code Playgroud)

附注。我使用 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
Run Code Online (Sandbox Code Playgroud)

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

  • 这是对我帮助最大的答案。不知何故,我在初始设置期间为基本路径设置了自定义位置。我可以通过在 Windows 注册表编辑器中手动查找来读取该位置。 (2认同)

Kan*_*ooo 5

您可以通过bash在位置栏中键入,从打开的文件夹的文件资源管理器窗口快速打开 Bash 。

够了。

您也可以添加上下文菜单项。如果不需要,我个人不推荐它,因为向上下文菜单添加快捷方式会占用更多 RAM。

https://www.howtogeek.com/270810/how-to-quickly-launch-a-bash-shell-from-windows-10s-file-explorer/


thi*_*ary 5

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

并请为有效的方法创建一个桌面快捷方式。