Skip to content

Commit fc255a8

Browse files
📝 更新Terminal和Python文档,增强内容结构与实用性
- 在Terminal文档中增加了WSL的详细安装步骤和命令示例,提升了用户的操作指导。 - 优化了Python文档,增加了pip与venv的介绍,强调环境管理的重要性,并提供了安装模块的实用信息。 - 更新了Makefile部分,增加了常用命令的表格,提升了文档的可读性和实用性。
1 parent 52d26a2 commit fc255a8

File tree

2 files changed

+156
-127
lines changed

2 files changed

+156
-127
lines changed

docs/docs/编程外的基础/Terminal.md

Lines changed: 137 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -9,56 +9,92 @@ Terminals
99

1010
面试中命令行通常特指类Unix系统,如Linux、macOS、Ubuntu等,这些系统与生产环境保持一致。
1111

12-
## WSL
13-
14-
如果你是 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 ,推荐使用 <HoverText text="WSL(Windows Subsystem for Linux)" explanation="可以在 Windows 上直接使用 Linux 应用程序、实用工具和 Bash 命令行工具(未经修改),无需传统虚拟机或双包设置的开销。"/>
15-
1612
:::info
17-
WSL的安装可以是通过命令在线安装,安装完成后,您需要为 Linux 环境创建一个用户名和密码。(Linux环境中密码不显示长度)
13+
Linux 内核衍生版本众多,譬如 ubuntu、debian、centos、fedora、archlinux 等。
1814

19-
如果网络不畅,也可以让其他安装好的人,导出为文件,再导入即可。(记得索要root密码哦)
15+
不同版本之间存在差异,譬如 ubuntu 大版本号之外,小版本号也很重要,此外有时候版本号和代号会混用
2016
:::
2117

22-
```bash showLineNumbers
23-
# 查看可用的Linux发行版列表
24-
wsl --list --online
25-
26-
# 安装指定的Linux发行版
27-
wsl --install -d <distro-name>
28-
# 示例:wsl --install -d Ubuntu-24.04
29-
30-
# 安装默认的 Ubuntu Linux 发行版。
31-
wsl --install
32-
33-
# 导出发行版
34-
wsl --export <你的Ubuntu发行版名称> <导出的文件路径>.tar
35-
# 示例:wsl --export Ubuntu-24.04 ubuntu-24.04-wsl-ros2.tar
36-
37-
# 从文件导入
38-
wsl --import <新实例的名称> C:\<新实例的文件夹> <压缩包的完整路径>
39-
# 示例:wsl --import Ubuntu-ROS2 C:\WSL_ROS2 D:\windows_app\systools\ubuntu-24.04-wsl-ros2.tar
18+
[网道 bash 教程](https://wangdoc.com/bash/intro)是开源的 bash 文档,教科书式的篇章划分能帮助学习者系统的了解终端命令。
4019

41-
# 列出已安装的发行版的名称、运行状态、wsl版本
42-
wsl -l -v
20+
[tldr](https://tldr.inbrowser.app/)是社区维护的命令行工具帮助页面合集,支持在线查询终端命令,有不同平台选择,支持不同语言显示
4321

44-
# 启动指定wsl
45-
wsl -d <新实例的名称>
46-
# 示例:wsl -d Ubuntu-ROS2
22+
## WSL
4723

48-
# 设置默认发行版(配置后输入wsl命令即可进入)
49-
wsl --set-default <distro-name>
50-
```
24+
如果你是 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 ,推荐使用 <HoverText text="WSL(Windows Subsystem for Linux)" explanation="可以在 Windows 上直接使用 Linux 应用程序、实用工具和 Bash 命令行工具(未经修改),无需传统虚拟机或双包设置的开销。"/>。
5125

52-
:::info
53-
Linux 内核衍生版本众多,譬如 ubuntu、debian、centos、fedora、archlinux 等。
26+
详细内容请参考[WSL官方教程](https://learn.microsoft.com/zh-cn/windows/wsl/)
5427

55-
不同版本之间存在差异,譬如 ubuntu 大版本号之外,小版本号也很重要,此外有时候版本号和代号会混用
28+
:::tip 提示
29+
- 某些版本的命令行需要使用 `wsl.exe` 而不是 `wsl`
30+
- `wsl --unregister` 会永久删除该发行版及其所有数据,无法恢复!
5631
:::
5732

58-
59-
[网道 bash 教程](https://wangdoc.com/bash/intro)是开源的 bash 文档,教科书式的篇章划分能帮助学习者系统的了解终端命令。
60-
61-
[tldr](https://tldr.inbrowser.app/)是社区维护的命令行工具帮助页面合集,支持在线查询终端命令,有不同平台选择,支持不同语言显示
33+
### 安装
34+
35+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
36+
|---------|---------|---------|------|
37+
| 安装WSL和默认Ubuntu | `wsl --install` | `wsl --install` | - |
38+
| 安装指定发行版 | `wsl --install <DistributionName>` | `wsl --install Ubuntu-24.04` | - |
39+
| 列出可用发行版 | `wsl --list --online` | `wsl --list --online` | `wsl -l -o` |
40+
| 列出已安装发行版 | `wsl --list --verbose` | `wsl --list --verbose` | `wsl -l -v`|
41+
| 仅列出运行中的发行版 | `wsl --list --running` | `wsl --list --running` | `wsl -l --running` |
42+
| 列出所有发行版 | `wsl --list --all` | `wsl --list --all` | `wsl -l --all`/ `wsl -l` |
43+
44+
### 网络与状态
45+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
46+
|---------|---------|---------|------|
47+
| 获取Linux的IP地址 | `wsl hostname -I` | `wsl hostname -I` | - |
48+
| 获取Windows的IP地址 | `wsl ip route show \| grep -i default \| awk '{ print $3}'` | `wsl ip route show \| grep -i default \| awk '{ print $3}'` | - |
49+
| 查看WSL版本 | `wsl --version` | `wsl --version` | `wsl -v` |
50+
| 检查WSL状态 | `wsl --status` | `wsl --status` | - |
51+
| 获取帮助信息 | `wsl --help` | `wsl --help` | `wsl -h` |
52+
53+
### 配置设置
54+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
55+
|---------|---------|---------|------|
56+
| 设置默认发行版 | `wsl --set-default <DistributionName>` | `wsl --set-default Ubuntu-24.04` | `wsl -s Ubuntu-24.04` |
57+
| 设置WSL版本(1或2) | `wsl --set-version <DistributionName> <Version>` | `wsl --set-version Ubuntu-24.04 2` | - |
58+
| 设置默认WSL版本 | `wsl --set-default-version <Version>` | `wsl --set-default-version 2` | - |
59+
| 更改默认用户 | `<DistributionName> config --default-user <Username>` | `ubuntu config --default-user johndoe` | - |
60+
61+
### 启动运行
62+
63+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
64+
|---------|---------|---------|------|
65+
| 启动默认发行版 | `wsl` | `wsl` | - |
66+
| 启动指定发行版 | `wsl --distribution <DistributionName>` | `wsl --distribution Ubuntu-24.04` | `wsl -d Ubuntu-24.04` |
67+
| 以指定用户启动 | `wsl --user <Username>` | `wsl --user root` | `wsl -u root` |
68+
| 指定发行版和用户 | `wsl -d <DistributionName> -u <Username>` | `wsl -d Ubuntu-24.04 -u root` | - |
69+
| 在用户主目录启动 | `wsl ~` | `wsl ~` | - |
70+
71+
### 导入导出
72+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
73+
|---------|---------|---------|------|
74+
| 导出发行版 | `wsl --export <DistributionName> <FileName>` | `wsl --export Ubuntu-24.04 ubuntu-backup.tar` | - |
75+
| 导出为VHD格式 | `wsl --export <DistributionName> <FileName> --vhd` | `wsl --export Ubuntu-24.04 ubuntu-backup.vhdx --vhd` | - |
76+
| 导入发行版 | `wsl --import <DistributionName> <InstallLocation> <FileName>` | `wsl --import Ubuntu-ROS2 C:\WSL_ROS2 ubuntu-backup.tar` | - |
77+
| 导入VHD格式 | `wsl --import <DistributionName> <InstallLocation> <FileName> --vhd` | `wsl --import Ubuntu-New C:\WSL_New backup.vhdx --vhd` | - |
78+
| 就地导入VHD | `wsl --import-in-place <DistributionName> <FileName>` | `wsl --import-in-place Ubuntu-New ubuntu.vhdx` | - |
79+
80+
### 管理维护
81+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
82+
|---------|---------|---------|------|
83+
| 终止指定发行版 | `wsl --terminate <DistributionName>` | `wsl --terminate Ubuntu-24.04` | `wsl -t Ubuntu-24.04` |
84+
| 关闭所有发行版 | `wsl --shutdown` | `wsl --shutdown` | - |
85+
| 注销并卸载发行版 | `wsl --unregister <DistributionName>` | `wsl --unregister Ubuntu-24.04` | - |
86+
| 更新WSL | `wsl --update` | `wsl --update` | - |
87+
| 从GitHub下载更新 | `wsl --update --web-download` | `wsl --update --web-download` | - |
88+
89+
### 磁盘管理
90+
| 功能描述 | 命令模板 | 命令示例 | 简写 |
91+
|---------|---------|---------|------|
92+
| 挂载磁盘 | `wsl --mount <DiskPath>` | `wsl --mount \\.\PHYSICALDRIVE1` | - |
93+
| 挂载VHD | `wsl --mount <DiskPath> --vhd` | `wsl --mount C:\disk.vhdx --vhd` | - |
94+
| 挂载指定分区 | `wsl --mount <DiskPath> --partition <PartitionNumber>` | `wsl --mount \\.\PHYSICALDRIVE1 --partition 1` | - |
95+
| 挂载指定文件系统 | `wsl --mount <DiskPath> --type <Filesystem>` | `wsl --mount \\.\PHYSICALDRIVE1 --type ext4` | `wsl --mount <DiskPath> -t <Filesystem>` |
96+
| 卸载磁盘 | `wsl --unmount <DiskPath>` | `wsl --unmount \\.\PHYSICALDRIVE1` | - |
97+
| 卸载所有磁盘 | `wsl --unmount` | `wsl --unmount` | - |
6298

6399
## 有趣的命令行体验
64100

@@ -81,6 +117,68 @@ Linux 内核衍生版本众多,譬如 ubuntu、debian、centos、fedora、arch
81117

82118
- 管道符 `|` 将前一个命令的输出作为后一个命令的输入 ,示例 `command1 | command2` |
83119

120+
## Makefile
121+
122+
Makefile 本质是自动化脚本,把常用的项目编译、测试、部署等重复性命令写进去,省得每次手动输入。熟练使用后能大幅提升开发效率。
123+
124+
创建名为 `Makefile` 的文件(无扩展名):
125+
126+
```makefile showLineNumbers
127+
# 基本示例
128+
# 目标: 依赖(可选)
129+
# 命令(必须用Tab缩进,不能用空格)
130+
131+
hello:
132+
echo "Hello World"
133+
134+
# 多个命令用分号或换行
135+
clean:
136+
echo "clean1"
137+
echo "clean2"
138+
echo "clean3";echo "clean4"
139+
140+
# all 依赖 build 和 test
141+
# make all 等价于
142+
# 先 make build
143+
# 再 make test
144+
# 最后执行命令 echo "all"
145+
all: hello clean
146+
echo "all"
147+
148+
# 使用变量
149+
PYTHON = python3.12
150+
# 声名伪目标(如果当前文件夹中没有与目标同名的文件、文件夹,那么可以不用声明伪目标)
151+
.PHONY: build clean
152+
build:
153+
$(PYTHON) -v
154+
```
155+
156+
使用:`make hello` → `make clean` → `make all` → `make build`
157+
158+
当`make`后面的参数会优先被解读为是:执行指定文件、切换目录。
159+
160+
如果我们工作空间中有名为:`build`的文件、文件夹,同时希望`make build`指向的不是文件。而是当前的`Makefile`中的`build`目标。
161+
162+
那么可以通过 `.PHONY: 目标名1 目标名2`来声名:请优先当前`Makefile`中的`目标名1`、`目标名2`。
163+
164+
165+
### make 命令常用参数
166+
167+
以下命令可以混合使用。
168+
169+
| 参数 | 作用 | 示例 | 说明 |
170+
|------|------|------|------|
171+
| `make` | 执行默认目标 | `make` | 执行 Makefile 第一个目标 |
172+
| `make 目标名` | 执行指定目标 | `make hello` | 执行 hello 目标 |
173+
| `make -f 文件名` | 指定 Makefile | `make -f Makefile` | 使用自定义文件名 |
174+
| `make -C 目录` | 切换目录后再执行 | `make -C ./src` | 进入 src 目录后执行 |
175+
| `make -n` | 模拟执行(dry run) | `make -n build` | 只显示会执行的命令,不真实执行 |
176+
| `make -s` | 静默模式 | `make -s clean` | 不显示执行的命令 |
177+
| `make -j N` | 并行执行 | `make -j 4` | 用 4 个并行任务加速编译 |
178+
| `make -B` | 强制重新构建 | `make -B` | 忽略时间戳,全部重新执行 |
179+
| `make -k` | 遇错继续 | `make -k test` | 某个目标失败后继续执行其他目标 |
180+
| `make VAR=value` | 传递变量 | `make PORT=8080 run` | 覆盖 Makefile 中的变量 |
181+
84182

85183
## 基本语法
86184

@@ -349,65 +447,3 @@ start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
349447
:::
350448

351449
不光是环境变量,其他命令的变量也遵循这个引号使用规则。正确理解和使用这些规则对于避免命令执行错误非常重要。
352-
353-
## Makefile
354-
355-
Makefile 本质是自动化脚本,把常用的项目编译、测试、部署等重复性命令写进去,省得每次手动输入。熟练使用后能大幅提升开发效率。
356-
357-
创建名为 `Makefile` 的文件(无扩展名):
358-
359-
```makefile showLineNumbers
360-
# 基本示例
361-
# 目标: 依赖(可选)
362-
# 命令(必须用Tab缩进,不能用空格)
363-
364-
hello:
365-
echo "Hello World"
366-
367-
# 多个命令用分号或换行
368-
clean:
369-
echo "clean1"
370-
echo "clean2"
371-
echo "clean3";echo "clean4"
372-
373-
# all 依赖 build 和 test
374-
# make all 等价于
375-
# 先 make build
376-
# 再 make test
377-
# 最后执行命令 echo "all"
378-
all: hello clean
379-
echo "all"
380-
381-
# 使用变量
382-
PYTHON = python3.12
383-
# 声名伪目标(如果当前文件夹中没有与目标同名的文件、文件夹,那么可以不用声明伪目标)
384-
.PHONY: build clean
385-
build:
386-
$(PYTHON) -v
387-
```
388-
389-
使用:`make hello` → `make clean` → `make all` → `make build`
390-
391-
当`make`后面的参数会优先被解读为是:执行指定文件、切换目录。
392-
393-
如果我们工作空间中有名为:`build`的文件、文件夹,同时希望`make build`指向的不是文件。而是当前的`Makefile`中的`build`目标。
394-
395-
那么可以通过 `.PHONY: 目标名1 目标名2`来声名:请优先当前`Makefile`中的`目标名1`、`目标名2`。
396-
397-
398-
### make 命令常用参数
399-
400-
以下命令可以混合使用。
401-
402-
| 参数 | 作用 | 示例 | 说明 |
403-
|------|------|------|------|
404-
| `make` | 执行默认目标 | `make` | 执行 Makefile 第一个目标 |
405-
| `make 目标名` | 执行指定目标 | `make hello` | 执行 hello 目标 |
406-
| `make -f 文件名` | 指定 Makefile | `make -f Makefile` | 使用自定义文件名 |
407-
| `make -C 目录` | 切换目录后再执行 | `make -C ./src` | 进入 src 目录后执行 |
408-
| `make -n` | 模拟执行(dry run) | `make -n build` | 只显示会执行的命令,不真实执行 |
409-
| `make -s` | 静默模式 | `make -s clean` | 不显示执行的命令 |
410-
| `make -j N` | 并行执行 | `make -j 4` | 用 4 个并行任务加速编译 |
411-
| `make -B` | 强制重新构建 | `make -B` | 忽略时间戳,全部重新执行 |
412-
| `make -k` | 遇错继续 | `make -k test` | 某个目标失败后继续执行其他目标 |
413-
| `make VAR=value` | 传递变量 | `make PORT=8080 run` | 覆盖 Makefile 中的变量 |

docs/docs/选择编程语言/Python/index.mdx

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,26 @@ Python环境管理工具经历了从简单到复杂,再到智能化的演进
3737

3838
记住,没有银弹,选择最适合你当前需求和技术栈的工具才是最好的选择。随着项目复杂度的增加,你可能需要组合使用多种工具来解决不同场景下的问题。
3939

40+
### pip 与 venv :陪伴新手成长的标准库
41+
42+
最早我学习Python是在网页上,主打随时随地学习编程,它提供了一个`Python 3.7`固定的环境,我只需要在线编写代码,点击运行就可以看到结果。它支持标准库外和`pandas``numpy`等常见的计算机科学库,我在这个网页上完成了Python的基础学习。
43+
44+
它的缺点是不支持自定义下载第三方模块,例如`requests`,于是在学习爬虫的时候我开始学习创建本地环境。
45+
46+
:::info
47+
在生活中,人们使用汉语、英语、法语、德语、日语等不同的语言跟不同国家的人进行交流。在使用计算机时,人们不能直接使用英语等人类的语言和计算机交流,而是使用编程语言(Programming Language)将人们的想法编写成程序,再通过执行程序控制计算机去解决各种问题。我们将这个编程语言与计算机之间的"翻译员"称为编程环境,简称"环境"。
48+
49+
Python环境主要由2部分组成:解释器和<HoverText text="模块库" explanation="包括标准库和第三方库,也叫包、模块、库、框架、依赖等"/>。环境管理的重点就是如何管理这些依赖,如何保证不同的模块库之间的兼容性,如何保证不同的模块库之间的可复用性。。
50+
:::
51+
52+
在 Windows 下安装 Python 是一件非常简单的事情,[Python 官网下载网址](https://www.python.org/downloads/)提供了windows安装的可执行文件,安装过程<Highlight>全部勾选</Highlight>,一路点击下一步就可以了。
53+
54+
安装模块也只需要使用`pip`下载安装包就可以了,如果遇到网络报错那就更换<HoverText text="镜像源" explanation="镜像源是pip下载包的地址的复制版,用于加速当地用户下载,国内有多个镜像源,例如清华镜像源、阿里云镜像源等,同步时间一般5分钟到30分钟不等。"/>,如果没有网络那就提前下载离线`wheel`,使用U盘安装。
55+
4056
:::info
57+
如果我们安装了中文语言包,那么我们的系统就可以识别与显示中文。
58+
如果我们安装了 Python 语言包,那么我们的系统就可以识别与运行 Python 程序。
59+
4160
windows 环境变量分为:系统变量(这台计算机的所有用户)、用户变量(当前用户)、临时变量(当前命令行窗口)。
4261

4362
同个命名空间下,变量名不能重复。如果系统变量和用户变量同名,那么用户变量优先级更高。
@@ -59,31 +78,6 @@ pip 是python的包管理器(自身也是包),常与解释器一起被安
5978
但现在流行只将解释器添加到环境变量中,如果解释器的名称为python.exe,则可使用`python -m pip`。例如:`python -m pip install requests`。(安装名为`requests`的包)
6079
:::
6180

62-
### pip 与 venv :陪伴新手成长的标准库
63-
64-
最早我学习Python是在网页上,主打随时随地学习编程,它提供了一个`Python 3.7`固定的环境,我只需要在线编写代码,点击运行就可以看到结果。它支持标准库外和`pandas``numpy`等常见的计算机科学库,我在这个网页上完成了Python的基础学习。
65-
66-
它的缺点是不支持自定义下载第三方模块,例如`requests`,于是在学习爬虫的时候我开始学习创建本地环境。
67-
68-
:::info
69-
在生活中,人们使用汉语、英语、法语、德语、日语等不同的语言跟不同国家的人进行交流。在使用计算机时,人们不能直接使用英语等人类的语言和计算机交流,而是使用编程语言(Programming Language)将人们的想法编写成程序,再通过执行程序控制计算机去解决各种问题。我们将这个编程语言与计算机之间的"翻译员"称为编程环境,简称"环境"。
70-
71-
Python环境主要由2部分组成:解释器和<HoverText text="模块库" explanation="包括标准库和第三方库,也叫包、模块、库、框架、依赖等"/>。环境管理的重点就是如何管理这些依赖,如何保证不同的模块库之间的兼容性,如何保证不同的模块库之间的可复用性。。
72-
:::
73-
74-
在 Windows 下安装 Python 是一件非常简单的事情,[Python 官网下载网址](https://www.python.org/downloads/)提供了windows安装的可执行文件,安装过程<Highlight>全部勾选</Highlight>,一路点击下一步就可以了。
75-
76-
:::info
77-
如果我们安装了中文语言包,那么我们的系统就可以识别与显示中文。
78-
如果我们安装了 Python 语言包,那么我们的系统就可以识别与运行 Python 程序。
79-
:::
80-
81-
安装模块也只需要使用`pip`下载安装包就可以了,如果遇到网络报错那就更换<HoverText text="镜像源" explanation="镜像源是pip下载包的地址的复制版,用于加速当地用户下载,国内有多个镜像源,例如清华镜像源、阿里云镜像源等,同步时间一般5分钟到30分钟不等。"/>,如果没有网络那就提前下载离线`wheel`,使用U盘安装。
82-
83-
:::info
84-
在部分系统预装版如Ubuntu、MacOS 中,`python`名为 `python3``pip``pip3`,Python 安装完成后,pip 也会自动安装完成。
85-
:::
86-
8781
但是随着我学习的内容越来越复杂,我安装的包出现了依赖项冲突。公司的项目中用到的一个包需要`requests`小于某个版本,而我正在学习的一个新框架需要`requests`大于某个版本。
8882

8983
于是我使用`venv`专门为我学习的新框架创建了一个虚拟环境,这样就避免了依赖项冲突。一切看起来很好。
@@ -112,7 +106,6 @@ Python环境主要由2部分组成:解释器和<HoverText text="模块库" exp
112106

113107
`conda` 创建环境真的很慢,而且体积很大,并且处理依赖冲突的时候也并不算智能。
114108

115-
116109
### Docker:以空间换时间
117110

118111
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其所有依赖打包成一个独立的容器,然后在任何有docker的地方运行。是开发者的终极梦想。

0 commit comments

Comments
 (0)