Linux on Windows (WSL2) 初次配置Log

你甚至可以在终端养鱼.jpg
前情提要
对CLI上瘾了,试试看Linux。但是Linux目前对于挺多软件(比如Adobe全家桶和绝大多数游戏)的兼容性不好,即便用了Proton可能也还是有潜在的性能问题,如果用双系统的话,写码和打游戏要重启电脑非常不方便,我又不可能为了体验而牺牲日常的使用和娱乐(至少是目前来说)。微软在May 2019宣布给Windows加入了WSL2,正好可以满足需求,试试看。
1. 配置WSL
(已经打开适用于 Linux 的 Windows 子系统和Virtual Machine Platform :
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
手动在控制面板 - 程序 - 启用或关闭Windows功能中打开
Note: Virtual Machine Platform在不同机子的翻译可能不同,反正是虚拟机平台那么个意思,稍微找找就有了
重启电脑。打开Windows Terminal,wsl --install。
等。
安装完之后,最好wsl --set-default-version 2 防止可能的版本冲突问题。
2. 安装、配置Linux(Ubuntu)
实际上直接通wsl --install -d Ubuntu-22.04安装Ubuntu,尤其是在国内,由于一些未知原因(不知道命令行是从Github拉取的还是什么特殊的协议)总之进度条会一直卡在0,推荐去Microsoft Store安装自己想要的版本:

推荐选Ubuntu 22.04,社区庞大,用户基数庞大(要选其他的我也拦不住反正是)。
此时直接在Terminal(cmd和PowerShell都可以)输入wsl就可以进入Linux界面了。
Microsoft Store下载的Ubuntu默认是安装在C盘的,以硬盘映像文件(.vhdx,Virtual Hard Disk v2)储存,本质上其实是一个虚拟硬盘映像,不过多阐述,但是其实可以视作一个系统,所以随着内部安装的东西越来越多自然储存空间会变得越来越大,所以除非你是超级富哥,你的C盘有1T的空间否则我不是很推荐安装,我会推荐安装到D盘。但是无论wsl install还是直接从Microsoft Store安装默认路径都是C盘,所以这个时候需要用wsl本身的指令和权限进行转移。
2.5 转移Ubuntu
推荐使用WSL自己的命令进行转移,一是MS安装的文件本身路径比较深,文件夹权限被保护的也比较好,如果直接在Explorer里面进行操作难免会遇到大大小小的问题,不稳定,强烈不推荐。
使用wsl命令进行转移:
1. 关闭正在运行的wsl实例:
wsl --list --verbose :查看已经安装的WSL实例,确保你确实已经安装了Ubuntu而不是有什么莫名其妙的奇葩东西在作祟。正常情况下应该是这样的:
然后输入你wsl --shutdown,这个命令会关闭所有的wsl实例。关闭之后可以选择再次wsl --list --verbose 确认STATE是Stopping的。
2. 导出Ubuntu / 或者其它已经安装的发行版
wsl --export <发行版名称> <盘符:\路径\到\你的临时存放发行版名称.tar>
这个.tar非常重要,它把你的文件导出为一个压缩包而不是其他形式,也方便后续导入。
这个路径是存储你临时存放的.tar压缩包文件的,而不是你最终的系统目录位置,所以你可以导入到哪里都没关系。
e.g.wsl --export Ubuntu-22.04.5 D:\tmppp\UbuntuLmao.tar
为了确认,最好在导出完成之后去资源管理器内去这个路径下查看是否有这么个文件。
3. 注销原来的Ubuntu发行版
wsl --unregister <原来的发行版名称>
完成之后,可以再次wsl --list --verbose 检查,现在应该就看不到原来的那个发行版了。
4. 导入已经导出的发行版压缩包
wsl --import <新发行版名称> <盘符:\路径\到\新的安装位置> <盘符:\路径\到\你的临时存放发行版名称.tar> --version 2
新发行版名称不建议使用和原来一模一样的发行版名称,因为我这样干了,然后后续权限调试似乎因为这个出了点问题,哈哈,妈的。我推荐"名字Ubuntu",比如"CynsmUbuntu"但是看个人,能记住的名字就行
e.g.:wsl --import CynsmUbuntu D:\CynsmUbuntu D:\tmppp\UbuntuLmao.tar --version 2
待导入完成之后,再次运行wsl --list --verbose (或者其简化wsl -l -v )
此时应该就能看到已经导入的Ubuntu了。
5.设置默认用户
通过wsl --import导入的发行版默认会以root用户启动,强烈不推荐这样做,因为root用户本质上是超级用户,有权限随意调用rm -rf这样危险的指令,而这对于新手来说显然会对系统造成不大好的后果,甚至导致整个系统的崩溃。
一般来说,我记得Ubuntu初次启动会让你设置默认的用户和密码,如果没有或者你的系统本身就没有这样的功能的话,那在以root进入你安装的Linux发行版系统之后,sudo nano /etc/wsl.conf ,在文件末尾添加以下内容:
[user]
default = <用户名>然后保存文件(Ctrl+O, Enter, Ctrl+X)
别忘记wsl --shutdown 然后wsl -d <转移好的发行版名称> ,或者单纯再开一个Terminal页面直接输入wsl似乎也可以。
如果启动之后,命令行末尾是以$符号而不是#符号结尾,并且用户名也变成了设置的用户名,那么说明成功以普通用户进入了。此时可以删掉备份文件.tar了(比如我的tmppp/UbuntuLmao.tar)
3. 系统基本设置
sudo apt update :更新软件包列表
sudo apt upgrade -y :省级已经安装的软件包
一般来说,安装了Ubuntu之后,wget等等常用命令都是已经包含在内的,尤其是对于Ubuntu22.04这种较新的发行版。其它发行版(如Debian等)请自行参考官方的使用文档。
对于我自己,我还没有安装一些常用的插件,而是搞了这些:
sudo apt install sl fortune cowsay lolcat asciiquarium figlet
sl:ls命令打岔了,强制出现一台字符组成的火车开过terminal。无法用Ctrl+C取消,专治手残(当然Ctrl+Z可以)
fortune:随机语录
cowsay:我去,说话的🐂
lolcat:彩色渐变
asciiquarium:终端养鱼

Cowsay, Figlet, lolcat和fortune结合使用的效果
以及搞这么一个Linux系统的初衷:Neovim。
4. Neovim / LazyVim
实际上我已经在Windows装了Neovim,但是用Windows Terminal开起来总是觉得……不是很对味,而且缺了点什么。所以单独弄一个环境出来单独安装Neovim,也就是写码更方便的Linux。
一开始是这样的: sudo apt install nvim
照理来说,Neovim这么基础且实用的工具理所应当在apt的universal包内。然而Neovim本身是一款快速迭代的软件,Ubuntu22.04这样的版本号,更多追求的是稳定性而不是快速迭代,所以apt install在这里不起作用。怎么办呢,这个时候就直接使用wget从github直接拉取Neovim即可:
wget https://github.com/neovim/neovim/releases/download/v0.9.5/nvim-linux64.tar.gz
然后解压下载的压缩包文件
tar xzvf nvim-linux64.tar.gz
清理下载的压缩包文件
rm -rf nvim-linux64.tar.gz (使用这个命令需要万分小心!)
创建一个符号链接到/usr/bin或者其他已经在PATH中的目录,例如这样:
cd /usr/bin
ln -s ~/nvim-linux64/bin/nvim nvim更推荐的做法是将 ~/nvim-linux64/bin 目录添加到 PATH 环境变量中(例如在 ~/.bashrc 或 ~/.zshrc 中添加 export PATH="$HOME/nvim-linux64/bin:$PATH"),或者将 nvim 二进制文件移动/链接到 /usr/local/bin/nvim,因为 /usr/bin 通常由系统包管理器管理,手动放入文件有时不太规范,但对于个人使用问题不大。
此时在终端中输入nvim应该就有这样的nvim界面了(我用windows terminal内原生安装的neovim代替的截图)

然后安装LazyVim / Lazy Neovim
git clone https://github.com/LazyVim/starter ~/.config/nvim
为了避免将来的.git操作错误,建议移除.git 目录:
rm -rf ~/.config/nvim/.git
打开nvim。初次配置会有这样的页面

等配置完之后,出现如图

初步配置完成。
后续
装了hollywood, cmatrix, libaa-bin, boxes和pipes.sh