当我在Windows Subsystem for Linux上启动bash时,它会将我放置在目录中。当我ls这个目录时,我会看到目录DesktopDocuments等我可以使用Windows File Explorer在C:\Users\<username>中看到它们。由于这是bash程序的开始位置,因此我希望这是我的主目录,但是当我键入cdcd ~时,我会被带到包含我的.bashrc
/mnt/c/Users/<username>


.profile等文件,希望在Linux机器的主目录中找到。此外,从此处输入cd ../..可以再次在Linux机器上按预期看到目录binetc等。

我对此有两个问题:
/mnt/c/Users/<username>C:\Users\<username>到底是什么?看来它们是同一个-那么/mnt/c/是什么?
如何使用Windows File Explorer查看/home/<username>中的文件?并不是我真的想要--我只是想了解Windows如何组织Linux子系统。


评论

Windows 10中Linux子系统的文件系统在哪里的可能重复?

#1 楼

对于2:当前路径现在与您从Microsoft Store安装的发行版相关,而不是与一个全局路径相关。对于Ubuntu,它现在位于:
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

我认为其他发行版将在其各自文件夹下的相似位置中:
%LOCALAPPDATA%\Packages\

这是一个老答案自2018年起有效,在最新版本[2020]中,文件系统可从以下位置访问:
 # \wsl$\<Distribution>:

\wsl$\Ubuntu
 


评论


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

–rainabba
18-09-25在19:53

重要说明:您仍然不应该使用Windows工具来查看Linux文件。请参阅:blogs.msdn.microsoft.com/commandline/2016/11/17/…(另请参阅博客文章本身)

–coltoneakins
18/12/11在6:14



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

–雪佛兰
19年7月12日在6:10

对于WSL2,您可以从Windows \\ wsl $这样的目录访问主目录

–Francisco Tena
19年10月31日在9:01

自Windows 10 1903起,@ FranciscoTena幸运的是\\ wsl $已可用于WSL1!

– pabouk
20年4月28日在20:56

#2 楼

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

explorer.exe .


不要遗漏“。”。

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

评论


实际上是explorer.exe。在WSL中工作。这是唯一对我有用的答案,因为其他答案提供的所有路径都不存在于我的系统中。我自己无法编辑答案,因为编辑必须至少包含6个字符。

– Marco Lackovic
19/12/10在11:07

有趣。就我而言,无论我在哪里执行explorer.exe。,它始终会在Windows用户主目录(%USERPROFILE%)中打开文件资源管理器。 Windows 10企业版1809(内部版本17763.1039),Ubuntu 18.04。不管我在Ubuntu的家中,/ etc还是其他东西。

– David FerenczyRogožan
20 Mar 6 '20 at 18:27



我认为我们在这里可能会传达错误的信息-答案似乎与bash本身有关,对吗?但不一定是WSL1中的重击。我只是在WSL1中的ubuntu安装上尝试过此操作,找不到“ explorer.exe”,所以我认为答案只能部分正确,这与Marco Lackovic所说的相反。也许explorer.exe可以工作,但默认情况下不是100%,因为我刚刚使用bash引导ubuntu的实例对其进行了尝试。

–雪橇
20年8月26日在16:25

这就是我所期望的谢谢

–ÄRÂmmãřŻąîñh
20年11月1日,9:55



这是一个很好的发现。相反,我正在做开始。对于大多数意图和目的,它等效于explorer。,但是在这种情况下是不同的。

–Coffee_fan
20-11-25在18:33

#3 楼



/mnt/cC:\完全相同。这只是从WSL获取它的语法。
请参阅C:\Users\<username>\AppData\Local\Lxss\rootfs


评论


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

–chx
17年5月5日在22:34

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

–dr_
18年3月20日在9:44

现在转到C:\ Users \ [USERNAME] \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_ [CODE] \ LocalState \ rootfs \您可能知道如果手动编辑/编辑,情况会很糟

–mementototem
18年6月21日在5:41



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

–树枝
19年5月13日在0:05

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

–达里恩
19年5月16日在7:20

#4 楼

关于安装在/mnt/c上的文件系统


/ mnt / c / Users /与C:\ Users <用户名>相比到底是什么?似乎它们是同一个人--- / mnt / c /是什么?


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

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



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

在WSL中,默认情况下,Windows中的C:磁盘安装在/mnt/c

如果您有另一个磁盘,例如Windows中的D:磁盘,它将安装在/mnt/d下。


/mnt/c中看到的文件与在C:中具有的文件相同。如果修改某些文件,也会在Windows中进行更改。
您可以使用mount命令访问其他类型的媒体(例如,可移动驱动器或网络共享)。

关于/home/<username>的位置


如何使用Windows文件资源管理器查看/ home /中的文件?并不是我真正想要的是-我只是想了解Windows如何为Linux组织此Subsystem。


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


WSL的初始版本将Linux文件系统存储在%LOCALAPPDATA%\Lxss\rootfs


从Windows商店开始的Windows Build 16215(2017年中)开始安装的WSL发行版使用类似%LOCALAPPDATA%\Packages\{package}\LocalState\rootfs的文件夹。软件包的名称因发行版本而异(例如,Ubuntu与Debian有所不同)。
对于Windows上的Ubuntu,例如CanonicalGroupLimited.UbuntuonWindows_{code}。诸如lxRunOffline或WSL-DistroLauncher之类的工具可以将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 10 Insider(快速环:Windows 10 build 19025.1),您可以将发行版安装为网络驱动器。
WSL可作为wsl$访问,路径是您的发行名称(wsl -l -q)。范例net use Z: \wsl$\Debian /PERSISTENT:YES

评论


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

–猎犬
19年11月16日在15:38

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

–驹
19年11月16日在16:19

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

–猎犬
19 Nov 16 '21:19



只需添加:这是根据devblogs.microsoft.com/commandline/…访问文件的首选方式

–mhl666
19/12/31在15:31

打开Windows资源管理器,然后键入打开\\ wsl $ \。然后选择您的linux发行版打开文件夹,甚至映射到一个字母。与wsl version1一起使用。

– arvati
20-4-6在11:26



#6 楼

这取决于您所使用的Windows版本,对于我来说,在2018年的Windows 10 Pro 64位版本1709(OS Build 16299.522)和版本1803(OS Build 17134.165)上,位置仍然是: > C:\Users\<username>\AppData\Local\lxss

窍门是,当您位于C:\Users\<username>\AppData\Local时,您将看不到lxss文件夹(除非您碰巧在文件夹选项中未选中“隐藏受保护的操作系统文件(推荐)”)。 br />
但是只要在Windows资源管理器地址栏中附加\lxss,它就会带您到该文件夹​​。债券答案)

更新

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

主文件夹的位置将取决于您已安装的这些WSL类型。使用Microsoft商店版本时,如其他答案中所述,它将位于:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc

#7 楼


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


评论


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

– Eamonn Kenny
19年1月11日在16:39

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

–艾利斯
19年1月13日在7:54



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

–tigr
19年1月21日在4:14

信不信由你,这种方法对我不起作用。 Windows无法找到rootfs或我在WSL主目录中创建的文件。我很困惑

– dx_over_dt
20/07/27在17:06

#8 楼

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


从开始菜单开始File Explorer
在地址栏中(不是搜索栏),键入%LOCALAPPDATA%。
在搜索栏中查找$ HOME目录名,在我的情况下为ekenny。大约有3个版本,但是您想要一个路径很长的版本。
右键单击您的主目录,然后单击“固定到开始”。

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

#9 楼

在我的设置中(从https://developer.microsoft.com/zh-cn/windows/downloads/virtual-machines下载的“ Windows 10开发环境”下的WSL Ubuntu),默认情况下隐藏了AppData文件夹。因此必须:


打开Windows资源管理器
转到C:\Users\User\

选择view上的
检查hidden items

然后AppData文件夹出现在C:\Users\User

,我在/home/user下找到了我的 C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_*\LocalState\rootfs\home\user(其中*可能是本地代码或版本,取决于某些代码)

Don不知道为什么会这样藏起来。

#10 楼

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



C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\etc\environment



我将Windows命名法中的/mnt/c/更改为C:\
我也更改了出于相同的原因,所有出现的/\
您需要用Windows用户名替换USER_NAME
我必须使用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


#11 楼

如果您使用Chocolatey安装发行版,则主目录的路径为:

C:\ProgramData\chocolatey\lib\wsl-<distribution-name>\tools\unzipped\rootfs\home


例如对于Ubuntu 18.04: />