WSL

以往我都是直接安装VirtualBox,然后再下载Linux系统的ISO镜像,装到VirtualBox里运行。

改用Win10系统后,了解到了WSL(Windows Subsystem for Linux),win10系统提供了直接安装Linux的便利,因此不用再通过虚拟机使用Linux系统。

  • WSL作为Windows组件搭载在Windows10周年更新(1607)后的Windows系统中。
  • WSL作为系统层的一部分,相较于应用层(虚拟机)会消耗更少的资源,并且与系统锲合度更高。
  • WSL并不是Linux发行版。它基于Windows LxssManager服务运行,该服务支持本机运行ELF二进制文件。本质上是系统层面对Linux内核的支持,只需要打开一个类似CMD的Bash命令行窗口,你的WSL就可以使用了(相当于建立了一个Session,因为WSL会一直伴随Win10的运行而运行)。
  • WSL虽然不是完整的Linux系统,但你依然可以做到绝大多数在完整Linux系统能做的事(比如vim, apt-get等)。

本文主要记录安装使用过程中的自己遇到的各种问题。

安装

打开"开始"->"设置"->"应用和功能",在"相关设置"里点击"程序和功能",在弹出来的窗口中选择"启用或关闭Windows功能",勾上"适用于Linux的Windows子系统"。

或者以管理员身份打开PowerShell,执行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

打开Windows Store,搜索"Linux"或者"Ubuntu",选择一个喜欢的系统下载,这里笔者下载的是Ubuntu。

  • 如果安装不成功,可能是因为之前卸载后没有重启有遗留文件导致,重启电脑后再继续安装即可。

输入用户名和密码,完成初始化。

  • 注意默认的用户并不是root,因此有些指令会提示"Permission denied."。如果要"run a command as administrator(user 'root')",也就是"以管理员身份运行",需要在你使用的命令前加sudo(super user do)。如直接执行"su"(switch user)的时候会提示"Authentication failure",而执行"sudo su"即可成功切换到root。
  • 如果你不想一次次的在命令行前加"sudo",可以用"sudo su"指令来切换到root,输入密码后即可切换到root;如果想切换回普通用户,输入"su <用户名>"则返回普通账户模式。

如果我们再懒一点不想每次都输入密码切换到root,可以设置默认账户为root。

  • 找到"C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ubuntu.exe",在cmd下执行"ubuntu.exe config --default-user root",即可将默认登录用户切换成root。如果没起效,重启一下lxssmanager服务。
  • 同理也可以用同样的方式切换成普通用户,将root改成你的用户名即可。

软件包管理

Distribution 代表 软体管理机制 使用指令 线上升级机制(指令)
Red Hat/Fedora RPM rpm, rpmbuild YUM (yum)
Debian/Ubuntu DPKG dpkg APT (apt-get)

NuGet类似,Linux里也提供了各种包管理工具来安装和升级常用软件,Ubuntu里默认使用的是APT,当然你也可以通过使用"apt install yum"来安装yum指令支持,这里我们仅仅先使用dpkg和apt。

  • dpkg:是"Debian Packager"的简写。用来安装.deb文件,但不会解决模块的依赖关系,且不会关心Ubuntu的软件仓库内的软件,可以用于安装本地的deb文件。
  • apt:会解决和安装模块的依赖问题,并会咨询软件仓库,但不会安装本地的deb文件,apt是建立在dpkg之上的软件管理工具。
  • 两者的区别是dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的软件包用apt可以再安装一遍,但系统不知道之前安装过了,将会覆盖之前dpkg的安装。

aptitudeapt-get一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些。aptitude 在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。

  • 有的问题 apt-get 解决不了,必须使用 aptitude 解决,有的问题,用 aptitude 解决不了,必须使用apt-get.
  • aptitude 解决得更好的地方:install, remove, reinstall(apt-get无此功能), show(apt-get无此功能), search(apt-get无此功能), hold(apt-get无此功能), unhold(apt-get无此功能)。
  • apt-get 解决得更好的地方:source(aptitude无此功能), build-dep (低版本的aptitude没有build-dep功能)。

综上所述,我们优先使用aptitude|apt-get命令,其次使用apt,只安装.deb包时使用dpkg。

更新下载源

默认的包下载源是国外的网址,我们可以更换为国内的镜像来提高日常常用软件的下载速度。

/etc/apt/sources.list是包管理工具apt所用的记录软件包仓库位置的配置文件,同样的还有位于 /etc/apt/sources.list.d/*.list的各文件。

sources.list文件中的条目一般都有如下所示的形式:

deb http://site.example.com/debian distribution main restricted universe multiverse
deb-src http://site.example.com/debian distribution main restricted universe multiverse

第一部分标识了档案类型:

  • deb:档案类型为二进制预编译软件包,一般我们所用的档案类型。
  • deb-src:档案类型为用于编译二进制软件包的源代码。

第二部分则是软件包所在仓库网络地址。

  • 常用镜像地址列表可以点此查看:DebianUbuntu

跟在仓库地址后的其他部分是发行版(Distribution)。可以用命令lsb_release -sc来查看当前系统的代号。发行版有两种分类方法:

  • 一类是发行版的具体代号,如 xenialtrustyprecise 等。Ubuntu各个版本分别对应18.04bionic17.10artful16.04xenial14.04trusty
  • 还有一类则是发行版的发行类型,如oldstablestabletestingunstable
  • 另外,在发行版后还可能有进一步的指定,如 xenial-updatestrusty-securitystable-backports 等。

最后部分则是main,restricted,universe和multiverse,这些文件夹里面包含了不同软件包索引。这几个文件夹内包的区别在于:

  • main: 完全的自由软件。
  • restricted: 不完全的自由软件。
  • universe: Ubuntu官方不提供支持与补丁,全靠社区支持。
  • multiverse:非自由软件,完全不提供支持和补丁。

下载源主要有教育网和非教育网的区别。教育网用户可以更换的下载源有清华大学镜像点,浙江大学镜像点,中国科学技术大学镜像点,北京理工大学镜像点等等;非教育网用户可以更换的下载源,主要是网易和阿里云,当然非教育网用户也可以设置成教育网的镜像点。

下面以Ubuntu16.04为例子,可以在百度上找到一堆镜像点,如下所示:

  • 清华大学镜像点:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
  • 网易163镜像点:
deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
  • 阿里云镜像点:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse

执行"cat /etc/issue",获取我们安装的Ubuntu版本号:

root@[windows user name]:/etc/apt# cat /etc/issue
Ubuntu 18.04.2 LTS \n \l

可以看出笔者现在安装的Ubuntu已经是18.04版本了,百度一下Ubuntu18.04版本镜像源,譬如我们选择阿里云镜像:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

先执行"cp sources.list sources.list.bak"备份一下源文件,然后输入"vim sources.list",在命令模式下输入"dG"可以删除文件里的所有内容,然后手动将上面的阿里云镜像源所有内容拷贝进命令窗口,在命令模式下输入":wq"即可保存sources.list退出了。之后可以再次通过vim命令或者cat命令查看sources.list文件内容是否更新成功。

我们测试一下软件更新,执行以下语句,看看是否可以顺利从aliyun上获取到资源:

sudo apt-get update  #从源地址上获取最新的软件列表
sudo apt-get upgrade #比对本地已经安装的软件,如果有更新则更新软件

事实上Windows将Linux系统安装在如下的目录中,我们执行的各种命令行操作可以清晰的在这个目录中看到文件的变化:

C:\Users\[%UserName%]\AppData\Local\Packages\{Linux发行版包名}\LocalState\rootfs

所以你也可以在"C:\Users[%UserName%]\AppData\Local\Packages\{Linux发行版包名}\LocalState\rootfs\etc\apt"里直接操作sources.list文件,就跟操作txt文档一样。注意在如果我们在windows直接操作的文件在bash里看的时候权限很可能会变成'----------',也就是任何用户都没有任何读写权限,需要通过"chmod 777 sources.list"之类的命令手动更改文件的访问权限,具体如何修改文件权限可以参照chmod --help命令的说明。

Linux子系统在"/mnt"目录下我们可以看到Windows下的所有目录和文件夹。

图像化界面

WSL的初衷是为了在Windows系统中运行Linux工具链,所以WSL没有“原生”搭载桌面环境,但这不影响我们自己安装一个Linux桌面环境。WSL想用GUI一般有两种方式,一种是用远程连接工具,一种是X server监听。

端口冲突

WSL和Win10共享同一套端口,如果出现两者监听同一个端口的情况,Windows主系统的程序拥有更高的优先级。也就是说,如果我们在WSL运行需要监听端口的程序,必须确认该端口没有被Windows主系统内的任何程序占用。如果出现冲突,请参阅软件相关文档修改默认配置。

例如,在WSL中安装SSH Server时,端口冲突将会导致WSL不能按照预期通过SSH连接登陆,但只需修改默认WSL的SSH监听端口,问题便迎刃而解。

众所周知,SSH的默认连接端口是22,但是微软在Win10中内置了SSH Server For Windows并占用了默认的22端口,因此如果要在WSL中开启SSH Server,我们必须修改WSL中的默认SSH监听端口。

后台运行任务

参考资料

  1. 优雅使用WSL子系统
  2. 详解sources.list文件

Windows10下Linux系统的安装和使用的更多相关文章

  1. vmware下linux系统的安装过程

    虚拟机VMware下CentOS6.6安装教程图文详解 [日期:2016-05-24] 来源:Linux社区  作者:Sungeek [字体:大 中 小]   分享下,虚拟机VMware下CentOS ...

  2. win10 vmware下Linux系统联网

    本来,这个问题网上资源很多的,但是就因为多,就变得杂了,对于许多新手,并不理解为啥,故记录下来方便以后使用.此处我采用配置VWmare虚拟网关(上学期刚刚学计算机网络,正好可以复习下).关于虚拟机下L ...

  3. 使用U盘进行Linux系统的安装

    由于目前很多服务器已经本身不配光驱了,最近测试了下使用U盘进行Linux系统的安装,过程比较简单,需要注意的地方如下: 1.找一台linux主机,插入U盘,执行fdisk -l,识别到U盘. 2.将需 ...

  4. 在VMware的Linux系统上安装Redis

    在VMware的Linux系统上安装Redis 具体过程如下: 下载,解压和编译: 在执行make的时候报错,具体报错信息如下: zmalloc.o: In function `zmalloc_use ...

  5. Linux系统手动安装rpm包依赖关系分析(以Kernel升级为例)

    有在Linux系统中安装软件的经历的人都知道,在Linux系统中手动安装软件不想在Windows下安装软件那么方便,直接双击,然后下一步下一步就可以把软件成功的装入到系统中,而在Linux系统中,安装 ...

  6. 在 Linux 系统中安装Load Generator ,并在windows 调用方法

    在 Linux 系统中安装Load Generator ,并在windows 调用 由于公司需要测试系统的最大用户承受能力,所以需要学习使用loadrunner.在安装的时候碰到了不少问题,所以写下此 ...

  7. Redis学习之一VMWare Pro虚拟机安装和Linux系统的安装

    一.引言 设计模式写完了,相当于重新学了一遍,每次学习都会有不同的感受,对设计模式的理解又加深了,理解的更加透彻了.还差一篇关于设计模式的总结的文章了,写完这篇总结性的文章,设计模式的文章就暂时要告一 ...

  8. Redis进阶实践之二如何在Linux系统上安装安装Redis

    一.引言      上一篇文章写了"如何安装VMware Pro虚拟机"和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我们才可以在该系统上安装Redis. ...

  9. Redis进阶实践之二如何在Linux系统上安装安装Redis(转载)(2)

    Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了“如何安装VMware Pro虚拟机”和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我 ...

随机推荐

  1. DFS判断连通图

    因为是连通图,所以从任意一点出发,一定可以通过一遍深度优先遍历就能走过所有的点和边,就可以利用这个性质来很容易的通过DFS判断图是否为连通图 下面是具体算法:

  2. python开源库——h5py快速指南

    1. 核心概念 一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group.在使 ...

  3. Object中有哪些公共方法及作用

    大家在学习java的时候,一定遇到过Object类,因为在java单一继承体系中Object类是根类,所有的类都会继承它,并拥有Object的公共方法,意味着在java的面向对象的世界中,所有对象都拥 ...

  4. c# 基础switct---case用于处理多条件的定值的判断

    题目:李四的年终工作评定,如果定为A级,则工资涨500元,如果定为B级,则工资涨200元,如果定为C级,工资不变,如果定为D级工资降200元,如果定为E级工资降500元. 设李四原工资为5000,请用 ...

  5. oracle 学习(三)pl/sql语言函数

    系统内置函数 数学运算函数 字符串函数 统计函数 日期函数 用户定义函数:存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样 参数模式 IN模式:表示该参数时输入给函数的参数 OU ...

  6. JavaScript学习笔记 - 入门篇(2)- 常用互动方法

    输出内容(document.write) document.write() 可用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容. 第一种:输出内容用""括起,直 ...

  7. SQL case when else 语句:选出年份等于1970的,选出的结果用科目和获奖者排序,同时把经济和化学2科放到最后:SELECT * FROM nobel_win WHERE year=1970 ORDER BY CASE WHEN subject IN ('Economics','Chemistry') THEN 1 ELSE 0 END ASC, subject, winner;

    SELECT * FROM nobel_win WHERE year=1970 ORDER BY  CASE WHEN subject IN ('Economics','Chemistry') THE ...

  8. ubuntu 深度学习cuda环境搭建,docker-nvidia 2019-02

    ubuntu 深度学习cuda环境搭建 ubuntu系统版本 18.04 查看GPU型号(NVS 315 性能很差,比没有强) 首先最好有ssh服务,以下操作都是远程ssh执行 lspci | gre ...

  9. Java之异常的处理(throws)

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...

  10. vue打包成app后,背景图片不显示

    问题: 在使用npm run build 打包后, 如果在页面中使用img标签引入,打包后的路径是由index.html开始访问的,真正访问的是Static/img/图片名, 是正确的, 但是写在cs ...