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

bcf*_*bcf 293 bash windows-10 windows-subsystem-for-linux

当我bash在 Linux 的 Windows 子系统上启动时,它会将我放到目录中

/mnt/c/Users/<username>
Run Code Online (Sandbox Code Playgroud)

当我ls看到这个目录时,我看到了使用 Windows 文件资源管理器时可以看到的目录DesktopDocumentsC:\Users\<username>。由于这是bash程序开始的地方,我希望这是我的主目录,但是当我输入cdcd ~我被带到

/home/<username>
Run Code Online (Sandbox Code Playgroud)

其中包含我希望在 Linux 机器的主目录中找到的我的.bashrc, .profileetc. 文件。此外,cd ../..从这里进入我可以看到目录binetc等等,这在 Linux 机器上再次如预期。

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

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

小智 309

在最新版本 [2020] 中,文件系统从以下位置访问:

# \\wsl$\<Distribution>:

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

此前,截至 2018 年,当前路径与您从 Microsoft Store 安装的发行版有关,而不是与一个全局路径有关;对于 Ubuntu,它位于:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
Run Code Online (Sandbox Code Playgroud)

其他发行版应(待确认)在其各自文件夹下的类似位置:

%LOCALAPPDATA%\Packages\
Run Code Online (Sandbox Code Playgroud)

  • 其他人觉得这种做法令人不安吗?我的 HOME 文件夹不应该是存储库中我的数据的一个安全位置吗?使用这种方法,损坏的存储库并重新安装软管我的数据根本没有尝试保护它并且当我已经有一个真正的 /home 时它是隐藏的。为什么数据不在那里持久化?这更加危险,因为我们现在被鼓励尝试/使用/交换发行版 (WLinux)。真的感觉有人没有把这件事想通。 (38认同)
  • 对于 WSL2,您可以像这样从 Windows 访问主目录 \\wsl$ (16认同)
  • @FranciscoTena 幸运的是,自 Windows 10 1903 以来,`\\wsl$` 已经可用于 WSL1! (12认同)
  • 重要提示:您仍然不应该使用 Windows 工具查看 Linux 文件。请参阅:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/#comment-85115(另请参阅博客文章本身) (7认同)
  • @rainabba 乍一看我同意,但经过深思熟虑后,我仍然选择使用 Windows 而不是成熟的 Ubuntu。因此,我将 WSL 视为访问 Linux 工具的一种方式,但仍将我的 Windows 文件系统视为一等公民。所以`/mnt/c/` 是我在 WSL 中存储所有内容的地方。如果 WSL 被逆转为 LWS,我会喜欢它;这意味着如果我们都运行带有适用于 Windows 的 Linux 子系统的 Ubuntu 以运行集成到 Ubuntu 中的完整 Windows 10 副本,那就太棒了。我知道,那会更难,但你可以做梦。 (5认同)
  • 截至 2022 年,我的路径是 `\\wsl.localhost\Distro_name` (2认同)

Gar*_*ett 179

在 Bash 中,要在 Windows 文件资源管理器中查看当前目录,只需输入:

explorer.exe .
Run Code Online (Sandbox Code Playgroud)

不要遗漏“.”。

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

  • 实际上 `explorer.exe .` 在 WSL 中确实有效。这是唯一对我有用的答案,因为我的系统中不存在其他答案提供的所有路径。我无法自己编辑答案,因为 _edits 必须至少为 6 个字符_。 (22认同)
  • 有趣的。就我而言,无论我在哪里执行 `explorer.exe .`,它总是在我的 Windows 用户主目录 (`%USERPROFILE%`) 中打开文件资源管理器。Windows 10 企业版 1809(内部版本 17763.1039)、Ubuntu 18.04。如果我在 Ubuntu 的家中、`/etc` 或其他什么地方都没有关系。 (4认同)
  • 我认为我们可能在这里沟通错误 - 答案似乎与 bash 本身有关,对吧?但 WSL1 中不一定是 bash。我刚刚在 WSL1 内的 ubuntu 安装上尝试过此操作,但找不到“explorer.exe”,所以我认为答案只能部分正确,与 Marco Lackovic 所说的相反。也许explorer.exe可以工作,但默认情况下100%不行,因为我刚刚用bash启动ubuntu的实例尝试过它。 (3认同)

Jos*_*ica 52

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

  • 现在它去了 ```C:\Users\[USERNAME]\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_[CODE]\LocalState\rootfs\``` 你可能知道编辑 ```/`` 有多糟糕` 手动 (33认同)
  • 截至 2018 年,此答案不再有效。请参阅@MichaelBond 的回答。 (14认同)
  • 警告:https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/ 是的,但不要改变任何事物。 (10认同)
  • 为了通过复制面轻松访问, `%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_[CODE]\LocalState\rootfs\` (3认同)

Jai*_*ime 48

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

  1. /mnt/c/Users/ 与 C:\Users<username> 相比究竟是什么?看起来它们是同一个——那么 /mnt/c/ 是什么?

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

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

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

  • 在 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\{package}\LocalState\rootfs. 软件包的名称因发行版而异(例如,Ubuntu 与 Debian 的名称不同)。对于 Windows 上的 Ubuntu,它是CanonicalGroupLimited.UbuntuonWindows_{code}
  • 使用其他工具安装的 Linux 发行版,例如lxRunOfflineWSL-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
Run Code Online (Sandbox Code Playgroud)

一旦你知道的安装文件夹的位置,/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 权限


小智 25

使用当前的 Windows 10 Insider(快速环:Windows 10 build 19025.1),您可以将发行版安装为网络驱动器。

WSL 可作为 访问wsl$,路径是您的分发名称 ( wsl -l -q)。

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


Use*_*ser 10

这取决于您使用的 Windows 版本,对我而言,2018 年在 64 位 Windows 10 Pro 版本 1709(操作系统版本 16299.522)和版本 1803(操作系统版本 17134.165)上的位置仍然是:

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。如其他答案中所述,对于 Microsoft 商店版本,它将位于:

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


小智 5

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