Installing bash on windows

You need to have (at least) Windows 10 anniversary edition:

Check with [Environment]::OSVersion.Version (see How can I tell which version of Windows is currently running?), you want at least "10.0.14393.0"

Once you're sure you're using the correct version, open the Settings app and head to Update & Security -> For Developers. Activate the "Developer Mode" switch here to enable Developer Mode.

You get a super scary warning (because you'll be allowing "apps" to be sideloaded)

Then a message... "installing developer mode package..."

The excitement is building...

I didn't get past that message until I'd cleared a bunch of space on my machine and restarted... it seems to have worked... Next step...

Control Panel -> Programs -> Turn Windows Features On or Off under Programs and Features.

Enable the "Windows Subsystem for Linux (Beta)" option in the list here and click OK.


run bash.

You have to confirm some scary shit.

The first time it's run it downloads some stuff. Message:

-- Beta feature --
This will install Ubuntu on Windows, distributed by Canonical
and licensed under its terms available here:

Type "y" to continue
Downloading from the Windows Store... 8%

It asks you to enter a username and create a password.

Then you're in.

Documentation link:

All the normal getting started on bash stuff applies. (See also: A Quick Intro to Linux Command Line for Windows Users and A Quick Intro to Linux Shell Scripting for Windows Developers )

Your traditional windows C drive is mounted at: /mnt/c

Your .profile (in home folder) says:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

    # if running bash
    if [ -n "$BASH_VERSION" ]; then
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
            . "$HOME/.bashrc"

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then

When you run bash you are running C:\Windows\System32\bash.exe.

Bash's files/data are stored in this location in windows:




When you edit your profile in bash, you are editing this file (assuming your linux user name is "LINUSER")




And guidance from windows is very clear: DO NOT EDIT any files in this \lxss\ folder using Windows applications.

This is a pretty fundamental issue... I was bitten by this almost immediately... i edited my profile using Notepad++ -- and linux promptly discarded and recreated the file. I was confused until I read the above article (weeks later!)

If WSL can't find Linux file metadata for a given file, it assumes the file is corrupted/damaged, and will likely fail to open/read the file correctly, causing apps, tools, etc. to fail and in some cases, delete files seen as "corrupt"!

File metadata (e.g. permissions, ownership, timestamps, etc.) is represented differently in Linux than in Windows. Because stores your Linux files in an NTFS folder, WSL calculates and persists each Linux file's metadata in its NTFS extended attributes.

However, Windows apps do not know how to (nor that they should) re-calculate & persist this Linux metadata each time they create/modify a file stored under your distro's root (%localappdata\lxss).

Therefore, if you use a Windows app/tool/console to create and/or modify a file under your distro root, it won't have any Linux file metadata (e.g. permissions, owner, timestamps, etc.) stored in its extended attributes.

Next things to do...

sudo apt-get install xclip
sudo apt-get install zsh
sudo apt-get install tree


bash.exe -c "/usr/zsh" will launch zsh directly


Important thing to do.... keep your packages up to date.

I saw a window spontaneously pop open on Wednesday 13th October 2016, AptPackageIndexUpdate --

(see this issue:

Turns out that's ok and perfectly acceptable, for now.

When you restart bash on windows, you might see a message like:

18 packages can be updated.
11 updates are security updates.

In which case, don't forget to:

sudo apt-get update

I found that doing that, then exiting bash and coming back in... I now had:

26 packages can be updated.
12 updates are security updates.

So... I ran "sudo apt-get update" again....

And this time when I exited and came back there were no more messages about packages to be updated.

Also I found that whenever i used sudo I would get a messge:

    unable to resolve host LEONCOMPUTER

Turns out I had to edit /etc/hosts (i.e. sudo nano /etc/hosts) to tell it that this is the local machine name.

previously it had localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

I had to add this line: LEONCOMPUTER

after this line: localhost

Another error

If you see this...

Windows Subsystem for Linux has no installed distributions.
Distributions can be installed by visiting the Microsoft Store:

You go there and it takes to the windows store (on your machine) where you get a choice of Linux distros. Wow.

I picked ubuntu. It's about 200 MB.

When it was "ready" I launched it. THis opened a console, and the console said:

Installing, this may take a few minutes...

The home folder is now stored at:


...which is an ad for using markjump.

Note you can install all the different distributions side by side.

And they have star ratings in the windows store. Ubuntu and Kali are popular. Others not so much.


See also