Linux的Windows子系统上的主目录是什么?


86

当我bash在Windows Subsystem for Linux上启动时,它会将我放置在目录中

/mnt/c/Users/<username>

当我ls看到该目录时DesktopDocuments可以看到C:\Users\<username>使用Windows File Explorer时出现的目录等等。因为这是bash程序启动的地方,所以我希望这是我的主目录,但是当我键入cd或时,cd ~我被带到

/home/<username>

其中包含我.bashrc.profile等文件,我希望在Linux中我的家目录中找到。此外,cd ../..从这里进入,我可以看到目录binetc依此类推,再次在Linux机器上可以看到。

关于这一切,我有两个问题:

  1. 究竟/mnt/c/Users/<username>与之相比C:\Users\<username>?似乎它们是同一个人---那是/mnt/c/什么?
  2. 如何/home/<username>使用Windows File Explorer查看文件?并不是我真的想要-我只是想了解Windows如何组织Linux子系统。

Answers:


102

对于2:当前路径现在与您从Microsoft Store安装的发行版相关,而不是与一个全局路径相关。因此,对于Ubuntu,它现在位于:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

我假设其他发行版将在各自文件夹下的类似位置:

%LOCALAPPDATA%\Packages\

11
其他人会发现这种做法令人不安吗?我的HOME文件夹是否应该是回购中存放我的数据的唯一安全位置?通过这种方法,一个损坏的存储库并重新安装了“我的数据”,根本没有尝试保护它,当我已经拥有REAL / home时,它就被隐藏了。为什么数据不能在那里持久保存?这更加危险,因为现在鼓励我们尝试/使用/交换发行版(WLinux)。真的感觉好像有人没有把整个事情都考虑在内。
rainabba

以我
为例

2
重要说明:您仍然不应该使用Windows工具在Linux文件上四处张望。请参阅:blogs.msdn.microsoft.com/commandline/2016/11/17/… (另请参阅博客文章本身)
coltoneakins

太棒了。git for Windows / mingw仍然可以更好地工作的另一个原因...更多的想法被投入到实际的日常工作量中。有没有办法正确地重新映射它?
enorl76

1
@rainabba乍一看,我同意,但经过一番思考,我仍然选择使用Windows而不是功能全面的Ubuntu。因此,我将WSL视为访问Linux工具的一种方式,但仍将Windows文件系统视为头等公民。所以,/mnt/c/在这里我存储在WSL的一切。如果WSL改用LWS,我会喜欢的。这意味着如果我们都运行带有Windows Linux子系统的Ubuntu来运行集成到Ubuntu的完整Windows 10副本,那将是非常棒的。我知道,这要困难得多,但可以做梦。
CHEV

29
  1. /mnt/c与完全相同C:\。这只是从WSL获得它的语法。
  2. 看看C:\Users\<username>\AppData\Local\Lxss\rootfs

8
警告:blogs.msdn.microsoft.com/commandline/2016/11/17/…没错,但是没有任何改变。
chx

6
截至2018年,此答案不再有效。请参阅@MichaelBond的答案。
dr01

11
现在,它消失了。C:\Users\[USERNAME]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_[CODE]\LocalState\rootfs\ 您可能知道/手动编辑有多糟糕
mementototem

为了方便通过复制粘贴访问,`%LOCALAPPDATA%\ Packages \ CanonicalGroupLimited.UbuntuonWindows_ [CODE] \ LocalState \ rootfs`
树枝

请注意,除非您取消选中“文件夹选项>视图:高级设置:隐藏受保护的操作系统文件(推荐)”,否则lxss文件夹将在文件资源管理器中隐藏。但是,即使它是隐藏的,如果在文件夹路径中输入该文件夹,仍然可以在“文件资源管理器”中打开该文件夹。
达林

17

关于挂载的文件系统 /mnt/c

  1. / mnt / c / Users /与C:\ Users \相比到底是什么?似乎它们是同一个人--- / mnt / c /是什么?

与Windows相反,Linux(以及其他基于Unix的系统)使用单个文件夹结构,而与您拥有的磁盘数量无关。如果您有多个磁盘,则所有这些磁盘都必须在某个时刻安装到文件夹结构中。

  • 通常,所有磁盘(不同于用于引导系统的磁盘)都安装在名为/mnt或的文件夹中。/media

WSL具有一种称为DrvFS的特殊文件系统类型,可让您访问Windows中使用的磁盘。您不仅可以使用Windows文件系统来安装DrvFS,还可以使用网络磁盘和其他媒体类型来安装DrvFS。

  • 在WSL中,默认情况下,C:Windows中的磁盘安装在/mnt/c
  • 如果您有另一个磁盘,例如D:Windows中的磁盘,它将被安装在/mnt/d

您可以看到的文件与中的文件/mnt/c相同C:。如果您修改某些文件,您也将在窗口中得到更改。

您可以使用该mount命令访问其他类型的媒体(例如,可移动驱动器或网络共享)。


关于位置 /home/<username>

  1. 如何使用Windows文件资源管理器查看/ home /中的文件?并不是我真的想要-我只是想了解Windows如何组织Linux子系统。

在WSL中,所有linux文件系统都位于Windows文件夹下。该文件夹的位置取决于您使用的Windows版本和WSL发行版。

  • WSL的初始版本将linux文件系统存储在%LOCALAPPDATA%\Lxss\rootfs
  • 从Windows商店开始安装的WSL发行版(从 Windows Build 16215(2017年中)开始)使用像这样的文件夹%LOCALAPPDATA%\Packages\...\LocalState\rootfs。软件包的名称取决于发行版本(例如,Ubuntu和Debian的名称不同)
  • 使用其他工具(例如lxRunOfflineWSL-DistroLauncher)安装的Linux发行可以将linux文件系统存储在任何位置。

您可以检查许多选项以了解WSL文件夹的位置。例如,我认为最简单的选择是使用lxRunOffline来了解安装文件夹。

## You can use lxrunoffline to check which WSL distributions have installed
## using:   lxrunoffline list

C:\> lxrunoffline list
backup
Ubuntu-18.04    

## And you can use it to get the location of any of these WSL installations
## using:   lxrunoffline get-dir -n <name of distribution>

C:\> lxrunoffline get-dir -n backup
c:\wsl\installed\backup

C:\> lxrunoffline get-dir -n Ubuntu
C:\Users\Jaime\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

知道安装文件夹的位置后,/home/<username>位于下方<installation folder>\rootfs\home\username

  • 例如,如果您的安装文件夹是 c:\wsl\ubuntu
  • /home/<username>c:\wsl\ubuntu\rootfs\home\username

注意: Linux和Windows都以不同的方式存储文件权限。如今,WSL DrvFS将Linux权限存储为流(元数据),附加到您可以在Windows中看到的文件。Microsoft不建议使用Windows程序修改linux文件。某些Windows应用程序可能会在没有通知的情况破坏linux权限


5

我想这可能取决于您使用的是哪个Windows版本,但对我而言,2018年在Windows 10 Pro 64位版本1709(OS Build 16299.522)和版本1803(OS Build 17134.165)上,Windows更新具有讽刺意味的是正在输入此],该位置仍为:

C:\Users\<username>\AppData\Local\lxss

诀窍是您在时C:\Users\<username>\AppData\Local不会看到lxss文件夹(除非您碰巧在文件夹选项中未选中“隐藏受保护的操作系统文件(推荐)”)。

但是,只需\lxss在Windows资源管理器地址栏中添加附件,它将带您进入该文件夹。

(注意我并没有有一个%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc或任何类似的是在迈克尔债券答复中提到)

更新资料

原来有我安装的旧版WSL。现在,WSL是通过Microsoft商店应用程序提供的。有适用于Ubuntu 18.04 LTS的版本,现在还有其他几种Linux版本(例如Debian)。如果要更新,则可能要卸载旧版WSL并安装Microsoft商店版本

主文件夹的位置将取决于您安装的是哪种类型的WSL。


4
  1. 使用WSL bash控制台,在您的主目录中,创建一个具有任意特定名称的文件,例如“ test_here.txt”。
  2. 然后使用Windows资源管理器,在搜索框中搜索文件test_here.txt。
  3. 在找到的文件上>右键单击>打开文件位置。

我试过了 没用 我在搜索中看不到该文件。但是,如果将文件放在/ mnt / c / Users / <用户名>中,则显然可以正常工作。
Eamonn Kenny

恐怕我尝试了WSL,但是我不再使用它了。我觉得它没什么用。(我每天都使用cygwin,而不是WSL,我发现它非常有用。)因此,我不再能验证它,对不起;)
Ellis

搜索rootfs的作品。然后,您可以从那里导航unbuntu文件系统。
tigr

2

Windows 10专业版将Debian / Ubuntu / OpenSUSE $ HOME固定到Windows的开始菜单的四个步骤:

  1. 从开始菜单启动文件资源管理器
  2. 在地址栏中(而非搜索栏中)键入%LOCALAPPDATA%。
  3. 在搜索栏中查找您的$ HOME目录名,在我的情况下为ekenny。大约有3个版本,但是您想要一个路径很长的版本。
  4. 右键单击您的主目录,然后单击“固定到启动”。

现在,您已将主目录固定到开始菜单。我尝试创建一个快捷方式,但是它并不能理解。


0

我只需要查找/etc/environment使用Ubuntu 16.04的Windows 10 NTFS存储即可。我在这里找到它:

C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\etc\environment
  • 我换/mnt/c/C:\的Windows命名。
  • 我也出于相同的原因将所有出现的都/更改\为。
  • 您需要替换USER_NAME为Windows用户名。
  • 我不得不使用sudo -H Nautilus获取查看存储在WSL中的用户文件的权限。
  • 切勿使用Windows应用程序在WSL中更新Linux文件。它将破坏您的Linux数据

在Linux(Ubuntu 16.04)方面,术语为:

$ sudo cat /mnt/c/Users/USER_NAME/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc/LocalState/rootfs/etc/environment

PATH="/mnt/e/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export LIBGL_ALWAYS_INDIRECT=Yes
export DISPLAY=localhost:0.0

0

使用当前的Windows 10 Insider(快速环:Windows 10 build 19025.1),您可以将发行版安装为网络驱动器。WSL的访问方式为wls$,路径是您的分发名称(wsl -l -q)。

例如 net use Z: \\wsl$\Debian /PERSISTENT:YES


您确定这仅限于WSL2吗?我以为从1903年开始,您就可以从Windows内部探索WSL文件结构的内容。通过该更改,可以创建地图网络位置。
Ramhound

如我所写,我不确定WSL2。有两点:介绍WSL2(来自内部版本18432)和由WSL 2支持的发行版。此功能与WSL2一起出现,我希望它可以与任何发行版一起使用。

除非您说的是1909(WSL2)是18363.476,而不是18432(Insider Preview 20H1),但这仅适用于20H1版本?
拉姆猎犬

-1

在Bash中,要在Windows File Explorer中查看当前目录,只需输入:

explorer .

不要遗漏“。” 这将在当前文件夹中打开Windows资源管理器,您可以看到与Windows系统其余部分相关的所有内容。


感谢您的贡献,但这仅适用于Bash,不适用于WSL(Linux的Windows子系统),这就是这个问题。我建议您删除答案,否则可能会被否决。
rmcsharry,

这在WSL中不起作用
Nicolai Anton Lynnerup
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.