519

When I start bash on Windows Subsystem for Linux, it drops me in the directory

/mnt/c/Users/<username>

When I ls this directory, I see the directories Desktop, Documents, etc. that I can see are in C:\Users\<username> using the Windows File Explorer. Since this is where the bash program started, I expected this is my home directory, but when I type either cd or cd ~ I am brought to

/home/<username>

which contains my .bashrc, .profile etc. file which I would expect to find in my home directory in a Linux box. Moreover, entering cd ../.. from here I can see the directories bin, etc and so on, again as expected on a Linux box.

I have two questions regarding all this:

  1. What exactly is /mnt/c/Users/<username> compared with C:\Users\<username>? It seems they are one in the same---so what is /mnt/c/?
  2. How can I view the files in /home/<username> using the Windows File Explorer? Not that I'd really ever want to---I'm just trying to get a feel for how Windows is organizing this Subsystem for Linux thing.
bcf
  • 5,333

11 Answers11

521

In the latest versions [2025 WSL2], the file system is accessed from:

# \\wsl.localhost\<distro name>
shortcut:
# \\wsl$\<Distribution>:
ex:
\\wsl$\Ubuntu

You can also find this path by starting the distro then running $ wslpath -w $HOME

The files themselves seem to be stored within a .vhdx file in a similar location to 2020's solution.

%LOCALAPPDATA%\wsl\<a unique uuid>\ext4.vhdx

For older WSL2 installs [2020] it would be a file like:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

For example with Debian the file would be a file that is an ext4 virtual disk:

%LOCALAPPDATA%\Packages\YourDistroName-ID\LocalState, you can see a file named ext4.vhdx

You can find the exact filenames by referencing the registry, ex: powershell:

(Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | ForEach-Object {Get-ItemProperty $_.PSPath}) | select DistributionName,BasePath,VhdFileName

Also useful if a distro isn't installed in the standard directory, doesn't seem possible to get using wsl command from the command prompt.

Previously, in 2018, The root Linux path was related to which distribution you had installed from the Microsoft Store rather than one global path; for Ubuntu, it was located at:

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

but with the files stored directly on the NTFS file system.

rogerdpack
  • 2,394
Michael Bond
  • 5,335
401

In Bash, to view the current directory in Windows File Explorer just enter:

explorer.exe .

Don't leave out the ".".

This will open windows explorer at the current folder and you can see where everything is in relation to the rest of your Windows system.

So to answer your question:

 explorer.exe $HOME

Will show you that it's a different directory than your windows Home directory.

rogerdpack
  • 2,394
Gary Barrett
  • 5,498
70
  1. /mnt/c is the exact same as C:\. It's just the syntax for getting to it from WSL.
  2. /home/username is a different directory in the distro's disk, look in C:\Users\<username>\AppData\Local\Lxss\rootfs.
rogerdpack
  • 2,394
54

About the filesystem mounted on /mnt/c

  1. What exactly is /mnt/c/Users/ compared with C:\Users<username>? It seems they are one in the same---so what is /mnt/c/?

In contrast to Windows, Linux (and the other systems based on Unix) use a single folder structure independent of the number of disks you have. If you have multiple disks, all these disks must me mounted into the folder structure at some point.

  • Typically, all the disks (different than the used to boot the system) are mounted in a folder named /mnt or /media

WSL has an special type of filesystem named DrvFS that gives you access to the disks used in windows. You can use DrvFS to mount, not only your windows filesystem, but also network disks and other media types.

  • In WSL, by default, the C: disk in windows is mounted under /mnt/c
  • If you have another disk, for instance a D: disk in windows, it will be mounted under /mnt/d

The files you can see in /mnt/c are the same you have in C:. If you modify some file, you will get the changes in the windows too.

You may use the mount command to access other types of media (e.g. removable drives or network shares).


About the location of /home/<username>

  1. How can I view the files in /home/ using the Windows File Explorer? Not that I'd really ever want to---I'm just trying to get a feel for how Windows is organizing this Subsystem for Linux thing.

In WSL, all the linux filesystem is located under a Windows folder. The location of the folder depends on the version of Windows and of the WSL distribution you are using.

  • Initial versions of WSL store the linux filesystem in %LOCALAPPDATA%\Lxss\rootfs
  • WSL distributions installed from the Windows Store, starting in Windows Build 16215 (mid of 2017), use a folder like %LOCALAPPDATA%\Packages\{package}\LocalState\rootfs. The name of the package varies depending on the distribution (e.g. it is different for Ubuntu than for Debian). For Ubuntu on Windows it is CanonicalGroupLimited.UbuntuonWindows_{code}, for example.
  • Linux distributions installed using other tools, such as lxRunOffline or WSL-DistroLauncher may store the linux filesystem into any location.

You may check many options to know the location of the WSL folder. For instance, I think the easiest option is to use lxRunOffline to know the installation folder.

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

C:&gt; 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:&gt; lxrunoffline get-dir -n backup c:\wsl\installed\backup

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

Once you know the location of the installation folder, the /home/<username> is under <installation folder>\rootfs\home\username.

  • For instance, if your installation folder is c:\wsl\ubuntu
  • the /home/<username> is in c:\wsl\ubuntu\rootfs\home\username

NOTE: Both Linux and Windows stores file permissions in different ways. Nowadays, the WSL DrvFS stores the Linux permissions as Streams (metadata) attached to the files you can see in Windows. Microsoft does not recommend to modify linux files using Windows programs. It is possible that some Windows applcations damage the linux permissions without notice it.

Tomas
  • 103
Jaime
  • 2,259
34

With the current Windows 10 Insider (Fast ring: Windows 10 build 19025.1) you can mount your distro as a network drive.

WSL is accessible as wsl$, the path is your distribution name (wsl -l -q).

For example net use Z: \\wsl$\Debian /PERSISTENT:YES

J. Scott Elblein
  • 541
  • 1
  • 6
  • 21
foal
  • 621
15

It depends on which windows build you are on, for me in 2018 on Windows 10 Pro 64-bit, Version 1709 (OS Build 16299.522) and also Version 1803 (OS Build 17134.165) the location is still:

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

The trick is when you're at C:\Users\<username>\AppData\Local you will not see an lxss folder (unless you happen to have unchecked "Hide protected operating system files (Recommended)" in your folder options).

However just append \lxss in the windows explorer address bar and it will take you to the folder.

(Note I did not have a %LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc or anything similar that was mentioned in Michael Bonds answer)

Update

Turns out there is legacy WSL which is what I had installed. Now WSL is provided via a Microsoft store app. There are versions for Ubuntu 18.04 LTS and also now a few other flavors of Linux (e.g. Debian). If you want to be up-to-date you should uninstall legacy WSL and install the Microsoft store version.

Where your home folder is will depend on which of these types of WSL you have installed. With the Microsoft store version it will, as mentioned in other answers, be located at:

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

User
  • 3,835
5
  1. Using WSL bash console, in your home directory, create a file with an arbitrary specific name such as "test_here.txt".
  2. Then using Windows Explorer, using the search box, search for the file test_here.txt.
  3. On the found file > right-click > Open file location.
Ellis
  • 177
3

Four steps for windows 10 pro to pin your Debian/Ubuntu/OpenSUSE $HOME to the start menu of Windows:

  1. From start menu start File Explorer
  2. In address bar (not search bar) type %LOCALAPPDATA%.
  3. In search bar look for your $HOME directory name, in my case it was ekenny. There will be about 3 versions of this but you want the one with really long path.
  4. Right click your home directory and click "Pin to Start".

Now you have your home directory pinned to your start menu. I tried creating a shortcut but that doesn't go anywhere intelligible.

3

On my setup (WSL Ubuntu under the "Windows 10 development environment" downloaded from https://developer.microsoft.com/en-us/windows/downloads/virtual-machines) the AppData folder was hidden by default. So had to:

  • open windows explorer
  • go to C:\Users\User\
  • select view on the meny
  • check hidden items
  • then the AppData folder appears under C:\Users\User
  • and I found my /home/user under C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_*\LocalState\rootfs\home\user (where * is probably a local code or version depending code of some sorts)

Don't know why it's tucked away like that.

Kjetil S.
  • 609
1

I just needed to find /etc/environment using Ubuntu 16.04 looking into Windows 10 NTFS storage. I found it here:

C:\Users\USER_NAME\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs\etc\environment
  • I changed /mnt/c/ to C:\ for Windows nomenclature.
  • I also changed all occurrences of / to \ for same reason.
  • You need to replace USER_NAME with your Windows User Name.
  • I had to use sudo -H Nautilus to get permissions to view the User Files stored in WSL.
  • NEVER update your Linux files in WSL using a Windows application. It will corrupt your Linux data.

From the Linux (Ubuntu 16.04) side the nomenclature would be:

$ 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
1

If you installed your distribution with Chocolatey, the path to the home directory is:

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

For example for Ubuntu 18.04:

C:\ProgramData\chocolatey\lib\wsl-ubuntu-1804\tools\unzipped\rootfs\home