DEV Community

Cover image for Getting Started With WSL
Jeremy Morgan for Pluralsight

Posted on • Edited on • Originally published at jeremymorgan.com

Getting Started With WSL

Windows Subsystem for Linux (WSL) is awesome.

It gives you the power to use Linux within your Windows system. A Linux shell can be difficult to learn, but the payoffs are incredible. You can become insanely productive with it. I encourage every Windows developer to give this a try.

Early in my development career, I was a Unix/Linux developer, and I loved working with the shell. In 2010 I was thrust into the world of Windows with GUIS. There was PowerShell and some workarounds, but it wasn't quite the same. While I eventually gained proficiency and speed at first, it was a drag.

The most significant advantage of WSL right now is improving productivity and bringing powerful Linux programs directly to your Windows desktop. So let's try it out!

Get WSL

Open up PowerShell as an administrator:

Windows Subsystem for Linux WSL

Run the following command

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enter fullscreen mode Exit fullscreen mode

Windows Subsystem for Linux WSL

Restart the machine as directed.

Now we need to install a Linux system. You can find plenty of them in the Microsoft Store:

Windows Subsystem for Linux WSL

Or you can just install it on the command line. For this tutorial I'll be using Debian. You can install it from a PowerShell prompt with this command:

Invoke-WebRequest -Uri https://aka.ms/wsl-debian-gnulinux -OutFile Debian.appx -UseBasicParsing
.\Debian.appx
Enter fullscreen mode Exit fullscreen mode

Windows Subsystem for Linux WSL

Now you'll be asked for a username and password. This doesn't have to be your Windows credentials, they're completely separate.

Windows Subsystem for Linux WSL

After you enter that, you're done! You've installed Linux on your Windows system.

Windows Subsystem for Linux WSL

You can find it in your start menu:

Windows Subsystem for Linux WSL

And it's ready to go!

Install Terminal

So if you're going to be using WSL and doing prompt things, Windows Terminal is pretty awesome. Let's add that. Search the Windows Store for "Windows Terminal"

Windows Subsystem for Linux WSL

Click "Get" then "Install"

With Terminal, you can keep PowerShell, command line, WSL prompts, and more all in one place. It's very convenient.

Windows Subsystem for Linux WSL

So let's do some stuff!

The Basics

So if you've never used Linux before and want to know how to get around, you've come to the right place. Here are some basic commands you can use to get started.

Where am I?

You can find out where you're at on the file system by typing

pwd
Enter fullscreen mode Exit fullscreen mode

Result:

Windows Subsystem for Linux WSL

Create a Folder

In Linux we call these "directories" and you create new ones by typing in

mkdir (name of directory)
Enter fullscreen mode Exit fullscreen mode

We'll create one called "stuff".

mkdir stuff
Enter fullscreen mode Exit fullscreen mode

Go into that Folder

Now let's go into that folder by typing in cd (change directory)

cd stuff
Enter fullscreen mode Exit fullscreen mode

Now type in pwd and you can see we're in the "stuff" directory.

Windows Subsystem for Linux WSL

Let's create some files in that folder:

touch file1.txt
Enter fullscreen mode Exit fullscreen mode

The "touch" command creates an empty file with whatever name you specify. So now we have a blank file named "file1.txt"

Let's create a few more:

touch file2.txt file3.txt file4.txt
Enter fullscreen mode Exit fullscreen mode

Now we have four files in the folder. But how would we know that?

Show all the files in a folder

We do that by typing in

ls -la
Enter fullscreen mode Exit fullscreen mode

Windows Subsystem for Linux WSL

ls is the command to list the directory contents, and the -la tells it to list everything, including hidden files.

We can see every file in the directory.

Let's create a couple more files:

touch testfile1.org testfile2.org testfile3.org
Enter fullscreen mode Exit fullscreen mode

Now we run ls and see our added files.

Windows Subsystem for Linux WSL

But what if we only want to see the .org files we just created?

Choosing Which Files to Show

We do that with wildcards (*), if we only want to see the .org files, we type in

ls *.org
Enter fullscreen mode Exit fullscreen mode

The star means "everything," so we want everything with a filename that has .org at the end of it.

Windows Subsystem for Linux WSL

If we only want to see files with the number 3 in them?

ls *3*
Enter fullscreen mode Exit fullscreen mode

You can place wildcards anywhere in the string, so it shows every file name with a 3 in it:

Windows Subsystem for Linux WSL

Pretty cool huh? What if we want to remove a file?

rm file2.txt 
Enter fullscreen mode Exit fullscreen mode

rm will remove the file. If we type in ls we'll see that it's gone now:

Windows Subsystem for Linux WSL

Wildcards also work with rm. We can remove all those .org files we just created:

rm *.org
Enter fullscreen mode Exit fullscreen mode

Now if we run ls -la again we can see the files are gone:

Windows Subsystem for Linux WSL

Removing a Folder

So what if I want to remove this folder full of files I just created?

To leave the folder and go back to my home folder, I type

cd ..
Enter fullscreen mode Exit fullscreen mode

then type in

rm -rf stuff
Enter fullscreen mode Exit fullscreen mode

And that removes the folder. Easy!

Conclusion

So in this tutorial, we got familiar with WSL and how to use it. We did the following:

  • Enabled WSL
  • Installed Debian Linux
  • Installed Windows Terminal
  • Created a folder
  • Created empty files
  • Deleted files

This is enough to get started navigating and moving things around. We're just scratching the surface of all the cool things you can do with WSL. If there's enough interest, I'll keep building more of these tutorials and expand on it.

Want to know more about Linux Commands? Check out this guide on Linux Command Line Fundamentals

Let me know what you think of this tutorial and some cool things you've done with WSL!!

Top comments (9)

Collapse
 
aleksandrhovhannisyan profile image
Aleksandr Hovhannisyan • Edited

A handy tip for anyone who wants to navigate to a Windows directory using WSL:

cd "$(wslpath "C:\Your\Windows\Directory")"

So you can copy a path from File Explorer, for example, and use the above to navigate to it in WSL. wslpath is a built-in utility.

Collapse
 
jeremycmorgan profile image
Jeremy Morgan

Awesome, I did not know that one! Thank you

Collapse
 
jldohmann profile image
Jesse

SUPER handy, thank you!

Collapse
 
jldohmann profile image
Jesse

I recently switched from a Mac to Windows machine for personal use (thought the exposure would be good!) WSL has been such a benefit while I slowly learn Powershell. I keep most of my Python-related tools in the WSL file system, as well as other misc installations

Collapse
 
binhhuynh profile image
Binh Huynh

I really like Terminal on Ubuntu. But after i read your post about WSL. Should i switch from Windows to Linux (Ubuntu) to use Terminal or I can use WSL on Windows ?. I'm learning web development. Thanks !.
P/S If i learning web development. Should i choose Windows or Linux (Ubuntu) to development web ?.

Collapse
 
susickypavel profile image
Pavel Susicky • Edited

Probably one of the major disadvantage of WSL (that makes me not to use it on daily basis) are quite slow I/O operations. It should be better in next version of WSL (which is not released AFAIK)

Great article Jeremy! ๐Ÿ˜„

Collapse
 
aleksandrhovhannisyan profile image
Aleksandr Hovhannisyan

Probably one of the major disadvantage of WSL (that makes me not to use it on daily basis) are quite slow I/O operations

Yeah, for sure. Part of the issue is Windows Defender. If you've ever used package managers like yarn or npm on WSL, you'll know that they're painfully slow, mainly because Windows Defender is very aggressive at scanning anything and everything.

WSL's also pretty limited if you need to do networking things on the network that your Windows is connected to.

Collapse
 
aicra profile image
marcia

Can you explain why or which use cases someone would use wsl? Why not use Linux or a vm?

Collapse
 
softchris profile image
Chris Noring

nice starter article Jeremy :)