目录

WSL 适用于 Linux 的 Windows 子系统

Windows Subsystem For Linux

Windows Subsystem For Linux 适用于 Linux 的 Windows 子系统允许开发人员直接在 Windows 上运行 GNU/Linux 环境(包括大多数命令行工具、实用程序和应用程序),无需修改,无需传统虚拟机或双引导设置的开销。

安装 WSL

如何使用适用于 Linux 的 Windows 子系统安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等)。 通过 WSL,你可使用与 Windows 工具(如 PowerShell 或 Visual Studio Code)完全集成的 Linux 工具(如 Bash 或 Grep),而无需双启动。

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。Windows + R 运行 winver 查看版本

以管理员权限启动 PowerShell

1
2
3
4
wsl --install
wsl --update
# Once the WSL updated, restart it with following command
wsl --shutdown

更改默认安装的 Linux 发行版

默认情况下,安装的 Linux 分发版为 Ubuntu。 可以使用 -d 标志进行更改。

  • 若要更改安装的发行版,请输入:wsl --install -d <Distribution Name>。 将 <Distribution Name> 替换为要安装的发行版的名称。 若要查看可通过在线商店下载的可用 Linux 发行版列表,请输入:wsl --list --onlinewsl -l -o。 若要在初始安装后安装其他 Linux 发行版,还可使用命令:wsl --install -d <Distribution Name>

检查正在运行的 WSL 版本

1
2
3
4
5
6
7
8
# 列出当前系统上已经安装的 Linux 子系统名称
wsl -l -v
# 去 https://aka.ms/wsl2kernel 下载 wsl2 更新
wsl --set-version Ubuntu-20.04 2
wsl --list --verbose

# 在以后安装 Linux 的时候默认启用 WSL2 操作系统版本必须至少大于或等于 Windows 10.0.18917
wsl --set-default-version 2

Ubuntu 22.04 LTS

Microsoft Store 下载安装 Ubuntu

需要注意,在商店中的安装并没有实际上完成 Linux 子系统的安装,你还需要运行一次已安装的 Linux 发行版以执行真正的安装操作。

验证是否是 WSL 2 我们只需要在 PowerShell 下输入 wsl -l -v ,输出内容如下,这里 VERSION 为 2 代表启用了 WSL 2

1
2
3
4
# 备份源
cp /etc/apt/sources.list /etc/apt/sourses.list.bak

apt-get update -y && apt-get upgrade -y

更换默认源为阿里源, 使用 sudo vim /etc/apt/sources.list 命令编辑,删除原来的内容,添加下面的阿里源信息

Windows Terminal Setting

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
"profiles":
    {    
        "list":
        [         
            {
                 "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
                "backgroundImage": "ms-appdata:///roaming/ubuntu.jpg",
                "backgroundImageOpacity": 0.5,
                "startingDirectory": "~"
            }
        ]
    }

可以在 WSL 的 Ubuntu 中安装 zsh、oh-my-zsh

Visual Studio Code Remote WSL

Plugins Remote - WSL

命令面板(Ctrl+Shift+P)中,输入shell选择终端:选择默认 Shell

/images/os/wsl/1588525754232.png

/images/os/wsl/image-20201027144354338.png

在终端中使用 VSCode

Ctrl+Shift+P 搜索 code 将 code 添加到 PATH

1
2
3
code test.txt
#  打开当前文件夹
code ./

选择默认终端

Ctrl+Shift+P 选择Terminal: Select Default Profile

1
2
3
4
5
6
7
8
9
{
    "editor.fontFamily":"CaskaydiaCove Nerd Font Mono, 'Consolas', Microsoft YaHei UI",
    "editor.fontSize": 17,
    "editor.fontLigatures": true,
    "workbench.colorTheme": "Default High Contrast",
    "explorer.confirmDelete": false,
    "terminal.integrated.defaultProfile.windows": "Git Bash",
    "terminal.integrated.fontSize": 20
}

Docker Desktop WSL 2 backend

WSL 2 引入了重大的体系结构更改,因为它是 Microsoft 构建的完整 Linux 内核,允许 Linux 容器在没有仿真的情况下本机运行,而 Docker 也专门开发了可以使用 WSL 2 中的 Docker 守护进程的桌面管理程序

安装 Docker for Windows

设置打开 wsl2 特性

  • 启用基于实验性WSL 2的引擎复选框(Enable the experimental WSL 2 based engine)
  • 暴露 2375 端口,让外部其他程序也能管理 Docker (打开 Expose daemon on tcp://localhost:2375 without TLS 前面的复选框)
  • 在 Resources 中设置要从哪个 WSL 2 发行版中访问 Docker

安装并配置 Kubernetes 环境

修改 Docker daemon 配置

docker 默认 Cgroup Driver 为 cgroup ,但是在 kubernetes1.14 之后的版本推荐使用 systemd 来作为 Docker 的 cgroup 驱动 。使使用 vim /etc/docker/deamon.json 命令修改或新建配置,具体配置内容可以参考 Kubernetes 官方。

1
2
3
4
5
6
7
8
9
{
  "registry-mirrors": ["https://6e0d9uoa.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

重启 Docker

1
2
3
4
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop
./load_images.sh
docker images

WSL 技巧

Windows 里有一个很有用的命令 「start」,start . 用资源管理器打开当前目录(或用 explorer .),start 文件名 用默认软件打开这个文件,这样就不用开了终端,还要手动去找这个文件再查看了,工作流得到优化。

Windows 下打开 WSL 目录

打开WSL状态下,Windows + R 运行 \\wsl$

安装 WSL 路径:C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

WSL会完成对Windows硬盘的自动挂载,在/mnt下,通过对应盘符即可访问。

在Linux下cd到需要访问的目录,然后运行"explorer.exe .",注意最后的".",表示用windows资源管理器打开当前文件夹。

WSL命令行调用 notepad.exe。

Windows命令行调用ls。

两者的输入输出管道可以对接,互相可以调用对方的二进制。

将linux根目录映射到win10磁盘

在win10文件地址栏输入 \wsl$ ,可以看到已安装的wsl文件系统,如 Ubuntu 右键-映射网络驱动器,选择要映射的盘符即可。 另外注意,可以用explorer.exe .命令使用windows文件资源管理器打开当前路径

在 terminal 配置文件中,找到Ubuntu配置项,添加如下配置即可 startingDirectory" : “//wsl$/Ubuntu-20.04/home”

PowerShell

1
2
3
4
5
6
# 获取当前Powershell执行策略等级
Get-ExecutionPolicy
# 若等级为Restricted或AllSigned
Set-ExecutionPolicy RemoteSigned
# 创建Powershell启动加载的脚本
New-Item -Path $Profile -ItemType file -Force

打开创建的脚本文件,将chcp 65001命令写入,然后保存退出文件; 重启Powershell,此后Powershell每次启动即会运行chcp 65001; 若不想每次启动Powershell显式"Active code page: 65001",可改写命令为chcp 65001 >$null,将输出丢弃;

附录