wsl 使用笔记
使用wsl很久了,是时候总结一波使用技巧,列出一些踩过的坑 慢慢遇到了再补全
简介
Windows Linux子系统(Windows Subsystem Linux,下简称wsl),是微软官方推出的应用程序。它能让开发人员直接在Windows上使用Linux系统,从而减轻使用虚拟机造成的开销。
大部分问题都可以参考官方文档
wsl能满足部分Linux使用需求,有一部分局限性: - 不支持含有GUI的应用程序。对于ctfer最大的影响在于使用pwntools时会非常难受。同时也不能使用python的opencv等库进行画图 - 不支持docker
那么wsl有什么好处呢?
最重要的一点是快。一些ctfer对linux开发的要求不高。更多是在遇到一道题目时,需要使用一些linux的工具或运行一些程序。这是再开虚拟机会比较繁琐。如果笔记本的配置不太高,开虚拟机又会占用很多开销,频繁切换虚拟机有时候也会非常的头疼,于是wsl成为了不错的选择。
同时wsl可以很方便的和主系统共享文件,主系统的磁盘被“挂载”在了/mnt/
下,你可以在/mnt/c/
中找到你C盘中的文件。
不过有一说一,对于电脑配置较好的,同时最好有双屏的,还是建议开虚拟机
安装
首先需要在Windows中启用WSL功能。位于控制面板->程序->启用或关闭Windows功能->适用于Linux的Windows子系统
安装过程其实非常简单,在win10的应用商店中搜索wsl,选择一个Linux发行版,我使用的是Ubuntu 18.04,下载。
启动
没错,启动也可以有很多种方法
- 在开始菜单中找到Ubuntu并启动
- 打开命令提示符(或PowerShell),输入
ubuntu
或bash
或wsl
,在当前窗口启动wsl,此时路径为你的cmd或PowerShell的路径(此处可以是任何一个终端,包括但不限于git bash,idea,vscode,cmder等) - 在某个文件夹的导航栏中输入
ubuntu
或bash
或wsl
,会在当前文件夹启动wsl,此时linux的路径就是当前文件夹 - 在右键菜单中添加
在此处打开wsl
,在某个文件夹右键并点击此选项,就可以在此文件夹启动wsl了
综合来看第四种的使用体验最佳,具体如何修改注册表加入右键菜单可以参考其他文章
初始化
初次使用wsl的时候需要进行一些初始化。第一次启动Ubuntu后会自动进行安装。如果遇到了
The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
说明你没有开启wsl服务,参考之前的安装部分
接下来输入用户名密码。和常规linux差不多。
注意,我们设置的是你新建的用户的用户名和密码,root用户的密码并没有被设置,默认情况下root的密码为空,所以当你执行su
命令想要切换root用户的时候,此时输入密码是如何也输入不对的。我们需要使用sudo su
切换到root,再设置root密码(参考)
这样我们得到了一个干净的linux系统,基本等于纯净版,很多应用程序都没有,因此需要安装一些常用应用程序。
在使用apt安装之前,强烈建议更换apt软件源,可以谷歌apt换源或参考我之前的文章。
使用技巧集合
在这里,我将列出使用wsl以来遇到过的坑,以及一些使用技巧。
环境变量问题
默认情况下,wsl再启动的时候会将Windows的环境变量导入,比如Windows的PATH中有一条C:\Program Files\
,则wsl中的PATH中会有一条/mnt/c/Program Files
。
1 | $ echo $PATH |
然而这条没有被双引号包裹起来,空格会将这条截断,有时会出问题,表示找不到/mnt/c/Program
这一条。
谷歌了一下,发现了解决办法。
很多时候我们不需要Windows的环境变量PATH,不如直接设置启动wsl的时候就不讲Windows的PATH加入wsl的PATH。
修改wsl的配置文件wsl.conf
,位于/etc/wsl.conf
。如果没有这个文件,可以新建一个。这个文件服从ini文件标准
。
根据微软的文档,wsl.conf可以将interop
部分的appendWindowsPath
设置为false
,同时将enable
设置为false
,从而使wsl启动的时候不将Windows的PATH添加进wsl的$PATH环境变量。只需添加这几行配置:
1 | [interop] |
再查看$PATH,其中已经没有Windows的PATH了: 1
2echo $PATH
/home/apeng/.local/bin:/home/apeng/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
参考资料
Set WSL launch settings: https://docs.microsoft.com/en-us/windows/wsl/wsl-config#set-wsl-launch-settings ini文件:https://en.wikipedia.org/wiki/INI_file