WSL-and-Linux-basic
# WSL 安装及 Linux 基本操作教程
给初次接触 Linux 和命令行操作的新手们(我也是新手qwq)
---
写在开始之前: **为什么是 Linux?**
在接触 Linux 前,我问过一些大手子群友,为什么要学 Linux?其中一个回答是“因为你不得不学”。虽然目前还没到“不得不”的程度,但是学习使用 Linux 的确是个真正锻炼自己的过程。据说 Docker 必需在 Linux 环境下运行,还有 Linux 权限比 Windows 自由,不会有一些奇怪的问题。除此之外,脚本、git 的命令行操作、编译过程、网站配置等等都是我在接触 Linux 后才真正开始学习。
本文旨在给初次接触 Linux 系统的新手们一个入门操作教程,希望能给你帮助。
---
## 在哪里用 Linux?
对于大部分 Windows 使用者,想要使用 Linux 无外乎以下几个方法:
- ~~再来一台 PC~~ 🤓☝️(我没有所以不会
- 双系统
- U盘启动
- 虚拟机
- 服务器
- WSL (Windows Subsystem for Linux)
首先,如果不是全新裸机,没有特别需求不要瞎搞双系统。双系统可能会有各种意想不到的错误,严重的可能导致数据消失甚至电脑变砖头)\
其次,U盘启动要求每次都插上U盘重启,虚拟机也需要经过较长的启动开机过程。繁琐的操作和枯燥的等待阻碍了学习Linux的第一步,我们的好奇心与热情很有可能被不断磨灭。 \
最后,真的有人没接触过 Linux 就上手服务器吗》?
因此,最佳答案就是搞一个 WSL 玩玩。WSL 主要优点包括免费、安装方便、启动速度快、原生 Linux 环境支持等等。
## WSL 安装
>开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。借助适用于 Linux 的 Windows 子系统(WSL),开发人员可以安装 Linux 分发版,并在 Windows 上直接使用 Linux 应用程序、实用工具和 Bash 命令行工具(未经修改),无需传统虚拟机或双包设置的开销。
——摘自[**Microsoft官方文档,点击跳转**](<https://learn.microsoft.com/zh-cn/windows/wsl/install>)
上方链接是 Microsoft 的官方文档,当中有 Microsoft 给出的下载使用教程。不过官方文档相当晦涩,也缺乏一些重要细节,最后还是上网搜寻社区教程。个人环境是 Windows 11 家庭版,仅供对照。
### 启用 Windows 的 WSL 和虚拟化功能
首先打开控制面板(点击 Win 徽标后搜索即可),**控制面板 -> 程序 -> 程序和功能 -> 启用或关闭 Windows 功能**,滚轮到最下方找到 **适用于 Linux 的 Windows 子系统** 并勾选,再找到 **虚拟机平台** 或 **Virtual Machine Platform** 并勾选(不同版本可能不同)
 
### 下载 Ubuntu
接着打开 **Windows PowerShell**(同上搜索),输入 `wsl --install` 直接默认下载Ubuntu,也可以指定下载版本:
``` Bash
# 查看可用发行版列表
wsl --list --online
# 安装指定版本,以 Ubuntu 24.04 为例
wsl --install -d Ubuntu-24.04
```
输入上述命令后,等待下载完成。
### 镜像站下载
如下载很慢又没有魔法,这里给出[**阿里云开源镜像站**](<https://mirrors.aliyun.com/ubuntu-releases/>)的链接,点击需要的版本号后找到以 `.wsl` 为后缀的文件,如[**Ubuntu-24.04.4(点击下载)**](<https://mirrors.aliyun.com/ubuntu-releases/24.04/ubuntu-24.04.4-wsl-amd64.wsl>),下载完成后**双击**该文件即可。也可以在下载文件夹执行以下命令:
``` Bash
wsl --install --from-file "你下载的文件名.wsl"
```
安装完成后会提示 **“Create a default Unix user account:”**,不建议包含中文,简单就好。Linux 输入密码时会“关闭回显”,即看不到输入的内容,不是卡了,正常输入后回车即可。结束后可用 `wsl -l` 确认安装的版本。
> **友情提醒**:安装完成后 Win 徽标下的页面会推荐把 Ubuntu 加入开始菜单,建议加入并放在“已固定”下方便用移动键(↑↓←→)移动到的位置,这样打开终端只需键盘上按 Win 徽标 + 移动即可,大大减少了鼠标操作。
## 迁移 Ubuntu 到 D 盘
> 把所有软件安装在 C 盘不是一个好习惯哦!
### 导出并重新安装
一整个系统的文件可不少,装在 C 盘太占空间了,故迁移到 D 盘。在 **PowerShell** 中依次输入:
``` Bash
# 将当前 Linux 系统关机
wsl --shutdown
'以下 Ubuntu 记得换成自己的系统版本名称,wsl -l 查看'
# 导出当前 Linux 系统文件(以 Ubuntu 为例)
# wsl --export <版本名称> <导出路径>
wsl --export Ubuntu 'D:\export.tar'
# 删除原有版本的所有文件
wsl --unregister Ubuntu
# 导入系统文件
# wsl --import <版本名称> <安装路径> <刚才的导出路径>
wsl --import Ubuntu 'D:\Ubuntu' 'D:\export.tar'
```
### 编辑配置文件
使用 import 后默认以 **root** 用户登录,但一直以 **root** 用户登录很可能导致误操作,下面我们通过 **Vim** 把刚才注册的用户设置为默认用户。
> **root 用户是什么?**\
> 简单来说,root 是 Linux 系统的“超级管理员”,拥有无视任何限制、修改或删除系统核心文件的能力。通常情况下,出于安全考虑,Linux 并不建议你平时直接登录 root 账号进行日常操作。而 `sudo` 则是一条“特权指令”,允许普通用户在需要安装软件或修改配置时,临时借用 root 的力量来完成任务。
> **Vim 是什么?** \
> Vim 是一个内置于 Linux 中的文本编辑器,你可以简单理解为 Windows 的记事本 + 不同的模式和快捷键。主要设计逻辑是用键盘完成所有操作,而不用频繁用鼠标移动光标等。学习曲线相当陡峭,但能极大提升开发效率。目前我们只需要掌握一些基本操作,应付一些配置就够了。
``` Bash
# 编辑配置文件
vim /etc/wsl.conf
```
Vim 进去后默认是 **Normal** 模式,该模式下用 **k(↑)j(↓)h(←)l(→)** 移动光标。我们 Vim 进去后按 `i` 进入 **Insert** 模式(记得切英文输入法)这时我们可以进行输入。简单起见我们进入 Insert 模式后用方向键操控光标到文件最后,`Enter` 新建一行复制以下内容并 `Ctrl V` 粘贴进去,引号内容删去改为你刚才的用户名。
``` Bash
[user]
default='君の名は'
```
之后按下键盘左上角 `ESC` 键,退回 Normal 模式,英文输入法下输入 `:`,下方会出现一行命令框,输入 `wq` `Enter` 保存并退出。现在我们输入
``` Bash
su '你的用户名'
```
就可以切换到你的用户啦。
## Linux 文件系统及基本命令
### 文件系统
**“一切皆文件”** 是 Unix 系统的设计哲学,让我们看看 Linux 的文件系统:
- Linux 所有文件都在同一个根目录 `/` 下(注意斜杠方向与 Windows 不同)
- `~`代表用户主目录,即 `/home/usrname`
- 访问当前文件夹下的文件不需要加斜杠,若当前在 `~` 下,可直接访问 `blog/content/...`
- Windows 上的文件被 **挂载** 在 `/mnt` 下,如 C 盘为:`/mnt/c`
- `..` 代表父文件夹,`.` 代表当前文件夹
- 以 `.` 开头的文件为隐藏文件(夹)~~虽然也能看见~~,如 `.vscode` `.git` `.gitignore`
``` Bash
/ '根目录'
├── bin -> usr/bin
├── dev
├── etc
├── home
│ └── usrname '即 ~ '
│ ├── .vscode '隐藏文件夹'
│ ├── .git '隐藏文件夹'
│ ├── .gitignore '隐藏文件'
│ └── blog
├── lib -> usr/lib
├── mnt '挂载'
│ ├── c
│ ├── d
│ └── e
...
```
### 基本命令
Linux 有以下基本的操作命令
#### 转到目录
``` Bash
cd ~/blog
```
#### 列出目录内容
``` Bash
ls -a # 所有文件,包括隐藏文件
ls -l # 输出详细信息
# 一般bash配置了以下别名(alias),相当于宏定义替换
# 可根据自己需要向配置文件写入别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
```
#### 创建、删除目录
``` Bash
mkdir ~/blog
rmdir ~/blog # 只能删除空目录
```
#### 文件操作相关
``` Bash
# 创建文件可用 touch
# 也可 vi 或 code(需配置vscode)后保存
touch ~/hello.cpp # 文件不存在才创建
# 用 vim 进行简单增删查改
vi ~/.bashrc
# rm : 删除文件(加上 -r 可递归地删除目录及下所以内容)
rm hello.cpp
rm -r ~/blog
# chmod : 修改权限
chmod 755 hello.cpp
chmod a+x jiaoben.sh
# ./ : 执行可执行文件
./main
```
#### 安装软件
``` Bash
# Ubuntu 的包管理器为 apt,可以通过包管理器在命令行完成下载工作,而不是像下载安装包再双击安装
# apt 的命令一般需要 root 权限
sudo apt update # 检查可用更新,不会安装或更新任何软件
sudo apt upgrade # 下载并安装新的软件包
sudo apt install python3
```
## VScode 配置
如果 Windows 端有 VScode,并且在安装时选择了 `添加到 PATH`,在命令行输入:`code .`会先安装相应的配置。如果显示
``` Bash
bash: command no found: code
```
说明缺少环境变量,可以 Win 徽标搜索环境变量,**环境变量 -> 用户的环境变量 -> 选中Path -> 编辑**,找到 VScode 那一行,复制路径,在终端输入 `vi ~/.bashrc`,光标移动到最后,添加以下内容:
``` Bash
# 例如我的是 D:\Program File\Microsoft VS Code\bin
# 替换为自己的路径,记得改掉反斜杠,有空格需用引号包围
export PATH=$PATH:'/mnt/d/Program File/Microsoft VS Code/bin'
```
再输入 `source ~/.bashrc` 加载配置文件,最后输入 `code .` 即可。终端会自动打开 Vscode,接着可以在插件栏安装相应的插件,会显示 “在WSL: Ubuntu 中安装”。点击安装即可。

## 神秘小仪式
> 既然都用了 Linux,为什么不学学命令行编译?~~可是我觉得很神圣啊~~
在 `~` 或者你喜欢的目录下在命令行输入 `vi hello.cpp`,按 **i** 进入 Insert 模式,输入:
``` C++
#include <iostream>
int main(){
std::cout << "Hello Linux!" << std::endl;
return 0;
}
```
然后输入 `:` `wq`,退回到终端,输入:
``` Bash
# 编译
g++ -o hello hello.cpp
# 运行
./hello
```
> Hello Linux!
## The End
有兴趣更深入学习 Shell、脚本和命令行可以访问 [MIT-Missing-Semester](<https://missing.csail.mit.edu/>),也可以在 Bilibili 等平台搜索授课视频。
[了解更多:菜鸟教程 Linux](<https://www.runoob.com/linux/linux-tutorial.html>)