25. Windows安装Linux子系统及VS开发配置指南

1.前言

前面二十多章的内容,我们都是在介绍Windows平台上的开发方法,从本章开始,我们便要开始介绍一种新的系统使用:Linux

但在这之前,我们还得先理解一下什么是操作系统。

电脑系统,说白了其实就是一个大型的软件,这个软件的主要功能就是来管理我们的硬件。

比如你买的硬盘,网卡,内存等等等等,都是依靠系统帮我们统筹的,如果没有系统,我们想要操作这些东西,很难很难。

而我们编写的软件,其实就是运行在系统上的,比如我们最常看到的exe程序,这就是windows系统的可执行文件,它也只能在windwos上运行。

你将它放到linux系统,mac系统,安卓系统等等,正常情况下是运行不起来的。

所以首先,我们要理清楚一些事实:

  • 系统是帮助我们管理电脑硬件设施的

这句话很重要,这意味着我们所看到的图形界面其实对于管理电脑硬件来说是没必要的,而且图形界面还需要大量的设备和cpugpu算力来支持,反而影响了电脑的性能。

事实上,电脑最初的模样就是我们前面看到的控制台,管理硬件设施全部靠输入命令来实现,不存在什么鼠标、也没有什么图形界面。

  • 不同系统之间的软件是不能互用的

这句话也很重要,因为很多时候你都会看到跨平台这句话,这是一个巨大的优势。

比如前面我们使用的Qt库便是跨平台,这就意味着,只要你代码中没有用平台特定的API,而全部使用Qt提供的库文件,你几乎不用更改任何代码,就能编译任意版本的程序。

理解了以上的两个事实,我们就可以开始下一步操作了

2.安装Linux系统

2.1 两种安装方式

一般来说,我们都会在一台电脑上只安装一个系统,比如目前我的电脑就安装的windows系统。

如果为了学习,将window系统卸载了,安装linux系统,那也有点大可不必。

所以就有了两种方法:

  • 安装虚拟机

虚拟机也是一个软件,但它可以在软件内模拟电脑的硬件环境,然后你就可以在其中安装你想要安装的任意系统,这样你就能在使用Windows系统的同时,正常学习Linux系统。

  • 安装子系统

这是windows推出的一个子系统,可以让两个系统共存操作同一套真实的电脑硬件,不过子系统的功能会比真实的linux系统功能少一些。

上面两种方法还有一个最显著的区别就是,一般前者安装Linux系统都会带有界面,就和Windows系统差不多,可以使用鼠标点击操作等等。

而后者就不存在界面,完全通过命令行进行操作。

对于学习Linux系统来说,使用命令行来操作系统是必不可少的技能,一旦你习惯了之后,甚至有一种用鼠标点击是一件浪费时间的事情,明明一行命令就解决了,却还要鼠标点好多下到处找!

而且用命令的另一大优势就是,你可以将各种常用的命令写成脚本,下次使用的时候直接运行这个脚本就能自动执行,非常方便!

这么说你可能也体会不深,所以接下来就让我们开始实践学习Linux系统。

2.2 子系统安装Linux系统

为了尽快熟悉Linux系统的使用,我就选择用第二种方案了,不仅安装更加简单,而且纯命令控制也更容易让大家早点习惯linux系统。

如果需要在虚拟机安装linux系统的,可以参考本站的另外一篇文章:VMware安装

为了能够正常使用子系统,我们首先要安装Windows组件,用管理员权限打开一个终端,执行下面两条命令即可快速安装:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

一般安装完之后,可能还需要重启电脑才能生效。

然后我们就可以找到windows自带的商店:

image-20231230193629130

然后搜索Ubuntu,随便下载一个即可,各个版本差别不大:

image-20231231082312867

可能你会想明明是要下Linux系统,为啥这里下的Ubuntu

因为Linux系统是一个统称,专业来说,它只是一个内核,而Ubuntu就是依靠该内核发展而来的一种发行版。

发行版有很多,而Ubuntu就是其中非常流行的一个。

下载完成后,点击打开,就会弹出控制台进行安装,安装好了之后,来到下面这个界面:

image-20231231082554316

输入完用户名后,就是输入密码,要牢记这个密码。

注意,输入密码时,这里是不会有任何反应的,你输入完成后,直接按Enter键即可。

然后再重复一下你刚才的密码,我们就完成安装了。

2.3 安装错误的解决办法

如果你在安装时出现错误提示,出现错误代码0x800701bc,那么很可能是你电脑上的wsl版本太老。

可以访问这个链接update-package,下载更新包:

image-20231231082741192

如果还有其它错误,可以直接去官方下载最新发行版进行安装:WSL

最简单的方法是直接执行命令:wsl --update,可以直接更新到最新版,如果无法执行、或者执行失败,那么最终的解决方案就是去下载最新发行版进行安装。

3.使用方法

3.1 基本介绍

正常安装后,就可以看到下图的内容:

image-20231230194319965

@前面的为当前的用户名,而@后面的则是当前系统名称,:后面的是当前所处路径,~代表当前用户的家目录。

输入pwd命令就可以查看当前所处路径:

image-20231230194353606

注意在Linux系统中没有CD盘的概念,只有一个根目录,即/

/home/yu就表示根目录下的home目录下的yu目录,可以理解为Linux系统只有一个盘,名字为/

一个目录,也就是一个文件夹,对于文件夹最重要的是什么?当然是查看文件夹里面有哪些文件了!

查看当前目录下有哪些文件的命令为ls

image-20231231083104025

当然,由于目前是新建的用户,里面是没有文件的,输入这个命令也就没有任何反应。

然后下一步,就是切换目录,比如前面提到的根目录,我想去看看,就可以使用cd命令,其后紧跟你想要去的目录

image-20231230194525348

上面我要去根目录,所以就是 cd /,然后就能看到箭头所指的当前目录发生了变化,为根目录名称。

现在再用ls命令,就可以看到有很多文件、目录了。

一眼看去有点多,不知道如何下手?

虽然看着多,但于我们刚学习Linux系统而言,并不用管太多,现在我们的目的是熟悉一下基础的Linux命令。

上面已经介绍了三个命令:

pwd:查看当前目录
cd:切换目录
ls:查看目录里面的文件

到这里你肯定就有疑问了,目录和文件都只是个字符串,我怎么知道这是文件还是文件夹呢?

这就用到ls命令的另外一个参数,即ls -l

image-20231230194638284

如上图所示,第一个字母为d的,就说明这是一个目录(directory

l的,代表它是一个链接,相当于我们windows系统的快捷方式,可以通过这个链接访问到原文件或文件夹。

-则代表它是一个普通文件。

那么可执行文件呢?这就可以看到下面的x

image-20231230194736190

-字符后面三个字母一组,含有x的就是可执行文件,而r就是可读,w就是可写。

至于为什么要分为三个组?

前面文章曾经提到过,虽然现在我们电脑一般是一人一台,但以前电脑很珍贵,都是一台电脑很多人用。

所以不同用户的文件肯定得有权限来限制互相访问,这里的三个组代表了三个权限,第一个是拥着者的权限,第二个是拥有者所属组的权限,第三个是其它用户的权限。

image-20231230194819258

该文件拥有者就是root,拥有者所在组也是root,因为现在个人电脑,一般用户都是自成一个组。

拿那个init文件举例。

第一个字符为-,则代表它是普通文件。

第一组为rwx,则代表它的拥有者root,对它可读可写可执行。

第二组也是rwx,代表与root用户所在同组的root里面用户,拥有对该文件可读可写可执行。

第三组也为rwx,则代表除了前面两种用户的其它任何用户对它,也是可读可写可执行。

发现没,就连目录同样也是可读可写可执行的?

java语言里面有句经典话语,那就是万物皆对象,即使你是什么intchar等基本数据类型,同样也是个对象。

而在linux系统里面则是万物皆文件,无论你是目录,还是可执行文件,甚至进程、内存,socket等等一切,都是文件,可以把它们当作一般文件操作,即读写执行等等。

但具体某些类型文件不支持执行等操作,比如目录。

3.2 文件操作命令

既然Linux系统一切皆文件,那么下面我们就来了解一下可以对文件进行各种操作的命令。

首先是创建命令:touch,其后紧跟要创建文件的名字:

image-20231231083259225

我在yu用户的家目录里面(cd ~或直接cd回到当前用户的家目录),创建了一个名为test的空文件:

-rw-r--r-- 1 yu yu 0 Dec 31 08:32 test

可以看到,它默认为普通文件,权限方面,yu用户为可读可写,yu这个组的成员为只读,其它用户也是只读。

这就是创建一个空文件的命令,然后下一步就是,我们如何调整这个文件的权限?

使用命令:chmod,其后紧跟要操作的权限,然后是要操作的文件。

比如我要给这个文件的yu用户(即这个文件的拥有者)添加一个可执行的权限:

chmod u+x test

u代表文件拥有者(user),还有g代表与该文件的拥有者属于同一个群体(group)的用户,o 表示其它用户(other),a表示全部(all)。

+表示增加权限、- 表示取消权限、= 表示直接设定指定的权限。

r 表示可读取,w 表示可写入,x 表示可执行。