WSL Configuring for Beginners

  • MacOS用户退散😃, 本身就是类Unix系统了
  • 本文的主要内容为
    • 希望达到的目标为: 让几个月前的自己在对这方面毫无了解时能够快速上手
    • WSL系统的描述, 与安装过程的基础, 命令行的基础使用
    • WSLVSCode的本地连接 / ssh连接
    • 连接后实现WSLC/C++的开发环境
    • vim基础用法(所以这个有什么好处吗)
    • 左光宏老师“C语言程序设计”课中一些问题的解释(放在其他地址了, 比如OpenMPEasyX)
  • 感觉没有完全解释清楚的地方
    • 标注❗的地方
    • WSL子系统的实现方式, 与完全系统的对比
  • Windows subsystem for linux
    • 可以体验全套linux命令行, 进行coding操作
    • 妈妈再也不用担心我装双系统电脑装坏了呢~
  • 踩坑过程中常常因为某些地方叙述不清楚而gg
    • 本文尝试做到详略得当
    • 虽然自己也不清楚是怎么把WSL搞得能用的
    • 如果仍然不懂, 可以继续上网查
  • 本文亦可作为
    • WSL搞死了之后(很不幸彻底搞死了), 重装的备忘录
  • 本文内容包括
    • WSL安装 & 初始设置
    • 命令行基本逻辑
    • 如果不了解VSCode的基础情况, 详见不存在的介绍(kk和zz还没有写完)
  • 欢迎补充!!!(特别是❓标注部分)
    • 自己本身不是很了解Linux, 所以有错的地方跪求纠正
    • 补充时麻烦进行明显的标注, 因为本文档是从.md文件中转过来的, 每次更新会直接覆盖之前的全部内容, 所以麻烦进行明显标注方便保留.
    • .md文件储存位置: nqhq的SurfacePro6@C:\Coding\Linux\WSL\beginners.md
  • 前提操作
    • 管理员权限powershell运行命令
      • 对❗
      • Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    • 控制面板
      • 控制面板→程序和功能→启用或关闭Windows功能→(勾选)适用于Linux的Windows子系统
    • 需要重启电脑
  • Microsoft Store
    • 到Microsoft Store里搜索Ubuntu
    • 安装LTS版本(本文基于20.02LTS)
      • long time service
    • 也可以去MSFT网页上找安装包, 这样可以安装到D:/盘里.
  • 安装成功后打开
    • 显示Installing...(忘记了)..., 大概等2min
    • 显示设置用户界面, 按顺序设置用户名, 用户密码, 二次确认密码
      • 注意❓
    • 更新和升级
      • sudo apt-get update && sudo apt-get upgrade
      • update下载新软件包, upgrade升级下载的新软件包
  • 关于换源
    • WSL需要安装软件, 是通过向指定的库进行调用❓
    • ❗一定记得备份原来的源文件!
      • sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
      • sudo: 超级管理员权限, cp: copy, 带/的东西: 文件地址
    • 可以选择清华, 科大, 阿里云等等的源, 网上有详细介绍
      • 似乎换源会引发文件依赖性问题, 但是并不确定, 而且学校网速可以接收
    • 挂vpn换源好像不管用!
  • 如何重置: 如果觉得WSL真的💥死了(并且心💔也死了)
    • Start Menu里对图标击右键, 选择应用设置
    • 找到重置icon并且点击, 就已经重置了
    • 或者即使备份WSL, 详见下一节
  • 关闭/重启WSL
    • powershell管理员
    • net stop LxssManager
    • net start LxssManager
    • 或者wsl -t <DistributionName>(后面会说到)
  • 注册表中的位置
    • 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\
  • 划重点: powershellwsl export/import
    • 所有的操作都在Windows的powershell里进行
  • 备份子系统
    • wsl --help 查看可用选项
    • wsl -l -v 查看正在运行的分发版(Distribution)
      • 注意, 名字可能为Ubuntu, 也可能很长, e.g.Ubuntu-20.04-20210101
      • 比如, 我安装的版本的DistributionName就是Ubuntu
    • wsl -t <DistributionName> 注销这个分发版的WSL
    • wsl --export <DistributionName> <FilePath>
      • e.g. wsl --export Ubuntu C:\Users\louze\Downloads\Ubuntu-20210201.tar
    • 推荐导出为tar格式, 至于为什么, 不知道
  • 删除子系统
    • wsl --unregister <DistributionName>
  • 还原子系统
    • wsl --import <DistributionName> <InstallLocation> <FilePath>
    • 此时默认用户会是root而不是个人用户, 会影响vscode使用, 需要解决
      • 在注册表中找到\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\DefaultUid
      • 修改为个人id的值(通过id <UserName> -u查看)
  • 其实, 这个方法可以用来在不同的存储器中转移WSL(或者在别人的电脑上安装自己的)
  • 结构
    • <尖括号>为必选项目的项目, (圆括号)标记可选项目
    • <命令> <附加> <对象地址>
      • rm -rf /(对不起这是个错误示范, 千万不要使)
      • cd /cd ~
    • (sudo) <应用> <对象地址>
      • sudo apt-get install sshd(然而这个还没搞定)
  • 一些常用命令
    • 安装软件: sudo apt-get install <deb name>
    • su <username> 换个用户登录
  • 待补充😝
  • 不懂的问题(求解答😳)
    • apt installapt-get install的区别?
    • deb软件包的实现?
  • VSCodeWSL结合, 可以实现极佳的C/C++调试体验
    • 通过GNUgcc g++ gdb进行
    • 通过VSCode中插件Remote - WSL进行连接.
    • 如果不熟悉VSCode基础操作, 见网页
  • 前提
    • 确保电脑上已经安装了VSCode
    • WSL命令行, 对应的所在目录里输入code ., 自动切换到VSCode
      • 爽, 不用手动配置了
      • VSCode打开bash: 快捷键(ALT加`)(后者在键盘左上角)
  • 安装: 在bash中使用sudo apt-get install加上要安装的东西
    • sudo apt-get install gcc
    • build-essential gcc g++ gdb cmake
      • libboost-all-dev是干什么的?
    • 通过查看版本, 检查是否安装成功
      • gcc -v, g++ -v, gdb -v
      • cmake --Version
    • 有可能已经安装过了, 关注一下检查版本时的情况
  • 安装: VSCode中的插件
    • C/C++, C++ Intellisense, CMake, Cmake Tools
  • gdb的使用
    • 自动创建即可, 注意选择需要的方式
    • 使用whereis g++命令查看g++在的位置, 推荐使用/usr/bin/g++路径
    • 可能出现缺少文件:
      • 无法打开“random.c”: 无法读取文件'vscode-remote://ssh-remote+314/build/glibc-ZN95T4/glibc-2.31/stdlib/random.c'
      • 注意N95T42.31
  • 参考文献
  • 通过ssh连接, 搭配VSCode插件
    • ❗ 需要更加详细描述
  • 重装openssh-server (据说可能有一定问题)
    • sudo apt-get remove openssh-server
    • sudo apt-get install openssh-server
  • 编辑\etc\ssh\sshd_config
    • 注意要编辑的文件是sshd_config! 有d
    • 使用vim编辑
      • 还不会
    • 使用nano编辑
      • sudo nano \etc\ssh\sshd_config
      • 每行#开头为被注释掉
      • 修改三行(所以这个文件可以叫做设置文件吗?)
        • Port 2222
        • PermitRootLogin yes
        • PasswordAuthentication yes
        • 为什么端口不用自带的22: 因为Windows22有其他用处, 需要避开
      • 同时按下Ctrl+O(是字母O), 然后Enter保存
      • 同时按下Ctrl+X退出nano编辑器
  • 重启服务 sudo service ssh --full-restart
  • 查询WSLip
    • 使用net-tools工具: sudo apt-get install net-tools
    • 命令行查询: ifconfig
      • 第二行(?) inet后为ipv4
  • 使用VSCode连接
    • 使用插件, 直接安装Remote Development, 它附加四个插件(一次性装五个插件)
      • 包括Remote - SSH(要用的), Remote - WSL(本机连接WSL要用的), Remote - Containers(Docker要用的)
        • Remote - SSH会附加Remote - SSH: Editing Configuration Files
    • Remote - SSH配置文件
      Host myWSL    // 实例名, 随便取, 简单最好
      Hostname 10.10.10.10    // 刚刚的inet ipv4
      Port 2222   // 刚刚配置的端口
      User cupt   // 想连接的用户的名称(一开始设置的), 也可以是root
      IdentityFile <DirName>  // 密钥路径, 没有也行, 没搞懂怎么用
      
  • 不单单可以用VSCode连接
    • Windows powershellssh <username>@<ipv4>
    • 例如: ssh cupt@10.10.10.10
    • 但是怎么指定端口为2222?
  • 目前的问题
    • 有些教程中说要设置防火墙的出入站规则? 没设置好像也行?
    • 如何在校外不使用VPN就能连接校内某台电脑的WSL?
    • 如果WSL所在的电脑网络连接为WiFi, 那么即使校内也连不上去. 怎么解决?
  • 金光闪闪的大佬编辑器
    • vi的升级版
    • 命令行输入vimtutor进入快速学习的文档, 建议打开拷贝的版本
  • 基础操作
    • 两种情况, INSERT模式和Normal模式, 使用iEsc进行切换
    • hjkl 左下上右
    • Normal模式和INSERT模式之间的切换
      • iEsc
      • Normal模式下
        • :q!退出而不保存
        • :wq退出并保存
        • x键删除下面的字符
        • dw, d$ (叙述见后)
      • INSERT模式下
        • 相应的还有append模式A, 在一行的末尾输入
        • 注意必须是大写的A!!!
  • UNDO / REDO:
    • u撤销, U撤销一整行
    • Ctrl-R: 重做一次
  • motion: w e # $
    • 光标的移动
    • w移动到下一个(词的开头)
    • e移动到下一个(词的结尾)
    • #移动到本行开始(??这条存疑)
    • $移动到本行结尾
      • 上面两句话注意断句
  • operator: d开头的命令
    • d=delete, 操作为d+另一个符号
    • dw删除, 到下一个词, 不留空格
    • de删除, 这个词删完, 留下空格
    • d$删除(从此处)本行直到结尾
    • dd删除本行
    • x键删除下面的字符
    • 被删除的内容都会被储存
      • p将刚刚删除储存的内容输出
  • operator: r replace
    • r<x>x替代光标下的字母
  • operator: c change
    • ce修改这个词
    • c<n>e用上count
    • 会导致变更到INSERT模式
  • count: 重复n次
    • motion前数字
    • 2w向后移动过两个字
    • 2dd删除两行
    • 不明白d2w是什么意思
  • home/students/nqhq/wsl_vscode.txt
  • 最后更改: 2021/10/17 00:12
  • 由 鸟雀呼晴