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


389

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


24
请注意, 我们(WSL团队)强烈建议您不要将其混入Linux发行版数据文件夹中。如果这样做,极有可能发生数据丢失和/或损坏的情况,我们正在努力改善这种互操作方案,并将在我们的博客上宣布任何进展:blogs.msdn.microsoft.com/commandline
Rich Turner

@RichTurner我发现有一个非常特殊的(令人讨厌的)原因-公司策略反复用错误的权限标记.ssh文件夹意味着需要将结构标记为公司脚本的“禁止访问”。但总的来说-我同意你的看法。
丹尼·史泰普

尽管它看起来像是具有最新更新的盒子,但这种情况不再发生。
Danny Staple

2
@DannyStaple如果您需要更改文件/文件夹的权限,从Windows,使用你的Linux发行版wsl.exe,例如wsl chmod 600 ~/.ssh/id*-不要通过Windows文件系统中的文件复制到这些文件夹。
Rich Turner

@RichTurner:你们为什么不像现在已经隧道NTFS元数据那样隧道Linux元数据?
Mehrdad

Answers:


421

对于从Windows应用商店安装的Ubuntu:

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

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

WSL使用的主要文件系统是VolF。它用于存储Linux系统文件以及Linux主目录的内容。因此,VolF支持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添加到这些目录之一,则缺少VolF所需的EA,因此VolF不知道如何处理该文件,而只是忽略了它。保存现有文件时,许多编辑器还会删除EA,从而再次使该文件在WSL中不可用。


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

在此处输入图片说明

资料来源:Dustin Kirkland的博客howtogeek


14
Lxss隐藏在我的文件系统中……导致一两分钟的头部刮伤。现在,我已经创建了一个快捷方式,但是我似乎仍然无法取消隐藏它。
Ogaday '16

3
@Ogaday,您无法使用属性窗口取消隐藏它,因为它被标记为系统目录。您可以使用取消隐藏它attrib -s -h lxss,也可以将其取消标记为系统目录。
developerbmw

3
由于我所在的位置不同,系统之间的位置似乎已更改或有所不同。我已在下面发布了我的位置。
NicholasJohn16

8
@souravc您能否在答案顶部添加一个重要说明,强烈建议您不要使用Windows应用程序和工具在LXSS中创建/修改任何文件:如果这样做,很可能导致数据损坏和丢失!
Rich Turner

5
请阅读上述文章:blogs.msdn.microsoft.com/commandline/2016/11/17/…。从WSL访问Windows文件系统是安全的,这就是我们在下面安装驱动器的原因/mnt/<drive>/,但是从Windows访问Linux文件系统是不安全的(这就是为什么)我们不能提供对发行版文件系统的轻松访问。
Rich Turner

51

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

%localappdata%\lxss\home\{username}

要么:

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

{user}Windows用户名和{username}安装过程中设置的UNIX用户名在哪里。

因此,根目录为:

%localappdata%\lxss

请注意,根目录在Windows资源管理器中可能无法从该%localappdata%目录看到。您仍然可以通过在资源管理器的“地址栏”中键入它来对其进行访问。


我的机器找不到:“ C:\ Users \ {用户} \ AppData \ Local \ Lxss \ {用户名}”或“%localappdata%\ Lxss \ home \ {用户名}”,但是“ C:\ Users \ {用户} \ AppData \ Local \ lxss \ {用户名}”起作用。IE使用“ lxss”而不是“ Lxss”
Joe Codeswell user601770 16/08/17

我的系统具有rootfs子目录,但是rootfs / home为空,而./home具有我的用户帐户和文件。似乎最安全的方法是直接转到%localappdata%\ lxss,然后从那里浏览以查看您的布局,再直接浏览到该地址可以避免lxss目录被隐藏的问题。
jla

1
@ JoeCodeswelluser601770这很奇怪。Windows文件系统通常不区分大小写。我可以输入%localappdata%\ Lxss或%localappdata%\ lxss,然后都转到%HOMEPATH%\ AppData \ Local \ lxss
jla

8
请注意,即使启用了隐藏文件夹视图,此文件夹(lxss)也不会出现在Windows资源管理器的AppData \ Local文件夹列表中。我不得不手动将文件夹lxss添加到资源管理器栏中,以获取此处的文件,例如,将文件夹“ url”编辑到此处
Colin D

或者,您可以转到桌面,右键单击“新建->快捷方式”,然后粘贴一个路径,例如C:\ Users \您的名称\ AppData \ Local \ lxss \ home \您的名称
Colin D

13

如果从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

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


5

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

并请创建一个适用于桌面的快捷方式。


很好的提示,也有同样的问题
Nicolas Mommaerts

4

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

够了

您也可以添加上下文菜单项。我个人不建议不要使用它,因为在快捷菜单中添加快捷方式会占用更多RAM。

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


对我不起作用。它打开命令提示符并启动bash。
blablatros

@blablatros是的,但是在女巫bash中的文件夹中,当您在资源管理器bash中书写并按Enter时,资源管理器已打开。尝试在“我的文档”文件夹中打开Windows资源管理器文件夹,并在位置栏中写bash,它将已经在该文件夹中打开ubuntu bash :)
Kangarooo

1
@Kangarooo:我想通过Windows 10 gui访问文件,反之亦然。在上面的答案中,我发现了如何通过Windows 10文件浏览器找到bash目录,因此我着手将一些文件从外部硬盘驱动器复制到该目录中。但是,当我打开bash终端并按时ls -a,它没有显示我添加的文件。Bash无法识别我通过Windows文件资源管理器放入的文件,对我而言,这完全击败了在Windows上安装Bash的目的。
thinksinbinary
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.