Skip to content

Commit 070d4fe

Browse files
committed
add to ch3 sec4 1
1 parent ffe3a7b commit 070d4fe

File tree

1 file changed

+189
-40
lines changed

1 file changed

+189
-40
lines changed

docs/ch3/sec4/1-useful-oss.md

Lines changed: 189 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,21 @@
1212

1313
### 1. [tmux:会话管理魔法](https://github.com/tmux/tmux)
1414

15+
**适用场景**:当你在服务器上工作时突然断网,所有任务都会丢失?tmux 能解决这个问题!
16+
1517
1. 前置知识:窗口与会话
18+
19+
许多初学者容易混淆终端、控制台、shell 和解释器这几个概念。我们来简单区分一下:
20+
21+
**终端(Terminal)**:是你看到的黑色窗口,允许你输入命令的界面。
22+
**Shell(壳程序)**:是一个命令解释器,运行在终端内,比如常见的 `bash``zsh`
23+
**会话(Session)**:是 shell 或程序运行的实例,比如你登录系统后打开一个终端窗口,它就是一个会话。
1624

17-
简单来说,无论是使用 SSH 还是 Linux 桌面自带的命令行,你所看到的那个黑色的“框框”便是一个窗口;在窗口中,运行了一个 shell 解释器(bash,sh,zsh 等等)或者其他应用程序,每个运行的程序进程被称为一个“会话”。
25+
!!! note
26+
Shell 本身是一个程序,它负责解析你输入的命令并交由系统执行。不同的 shell 功能略有差异,比如 `bash` 是默认的,`zsh` 更强大。
1827

19-
!!! note
20-
何为"解释器"?解释器是一个交互的,实时运行的命令环境。解释器可以使用很多语言,如 shell、powershell 和 python。
28+
!!! note
29+
何为"解释器"?解释器是一个交互的,实时运行的命令环境。解释器可以使用很多语言,如 shell、powershell 和 python。
2130

2231
很多同学可能会认为"解释器是操作系统的一部分",这实际上是不准确的:在 Linux 中,各发行版通常都预装了一个解释器,但我们也完全可以自行安装更好的解释器。在 Windows 中,系统的确提供了一个底层解释器 cmd,但用户也可以选择使用 PowerShell、Git Bash 等其他解释器。
2332

@@ -30,6 +39,14 @@
3039
- 分离会话并在稍后重新连接,即在后台运行任务
3140
- 创建分屏布局,同时查看多个会话
3241

42+
```mermaid
43+
graph LR
44+
A[SSH 连接] --> B[tmux 会话]
45+
B --> C[关闭 SSH]
46+
C --> D[重新连接]
47+
D --> E[恢复工作状态]
48+
```
49+
3350
3. tmux 的基本概念
3451

3552
tmux 有三个重要概念:
@@ -38,6 +55,14 @@
3855
- **窗口(Window)**:类似于浏览器的标签页,每个窗口包含一个或多个窗格
3956
- **窗格(Pane)**:窗口的分割部分,每个窗格运行一个 shell
4057

58+
!!! tip "新手理解"
59+
想象你正在用浏览器:
60+
61+
**窗口** = 浏览器窗口
62+
**标签页** = tmux 的窗口 (Window)
63+
**分屏浏览** = tmux 的窗格 (Pane)
64+
**会话** = 保存所有标签页和分屏的完整工作状
65+
4166
当我们使用不带任何参数的`tmux`时,tmux 会为我们创建一个新的**会话**,这个会话中有一个**窗口**,窗口中有一个**窗格**
4267

4368
我们可以通过 tmux 会话下方的信息条查看该会话中**窗口**的数量和名称。
@@ -70,6 +95,21 @@
7095
tmux detach
7196
```
7297

98+
!!! tip "什么是分离会话?"
99+
想象你在办公室工作到一半需要离开:
100+
1. 把文件留在桌上(分离会话)= `Ctrl+b d`
101+
2. 下班回家(断开SSH)
102+
3. 第二天回来(重新连接SSH)
103+
4. 坐回桌前继续工作(连接会话)= `tmux attach`
104+
你的工作状态完全保留,就像从未离开过!
105+
106+
!!! tip "重要提示"
107+
tmux 的所有快捷键都需要先按**前缀键**(默认是`Ctrl+b`),然后松开,再按功能键。例如:
108+
- 分屏:先按`Ctrl+b`,松开,再按`%`(垂直)或`"`(水平)
109+
- 切换窗口:先按`Ctrl+b`,松开,再按数字键`0-9`
110+
111+
记忆技巧:把`Ctrl+b`想象成"告诉tmux我要发命令了"
112+
73113
以下是对**窗格**的操作快捷键:
74114

75115
- `Ctrl+b + %`:垂直分屏
@@ -87,22 +127,31 @@
87127
- `Ctrl+b + ,`:重命名窗口
88128
- `Ctrl+b + &`:关闭当前窗口
89129

90-
!!! example
91-
如果我们想创建一个如下布局的窗口,我们需要执行以下操作:
92-
![tmux 示例](../../assets/tmux_example.png)
130+
!!! example
131+
如果我们想创建一个如下布局的窗口,我们需要执行以下操作:
132+
![tmux 示例](../../assets/tmux_example.png)
93133

94-
```bash
95-
tmux # 进入 tmux 环境
134+
```bash
135+
tmux # 进入 tmux 环境
96136

97-
# Ctrl+b % 创建垂直分屏
98-
# Ctrl+b " 创建水平分屏
99-
# Ctrl+b ← 返回最初始的分屏
137+
# Ctrl+b % 创建垂直分屏
138+
# Ctrl+b " 创建水平分屏
139+
# Ctrl+b ← 返回最初始的分屏
140+
```
100141

101-
```
142+
!!! bug "新手常见问题"
143+
断开后如何恢复?
144+
145+
```bash
146+
# 列出所有会话
147+
tmux ls
148+
# 重新连接
149+
tmux attach -t work
150+
```
102151

103152
### 2. [Oh My Zsh:实用的 shell 解释器框架](https://ohmyz.sh/)
104153

105-
Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置。它提供了数百个插件和主题,让你的命令行体验更加强大和美观。
154+
Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置。它提供了数百个插件和主题,让你的命令行体验更加强大和美观。同时自带错误纠正和智能提示。
106155

107156
1. Oh My Zsh 的作用
108157

@@ -139,6 +188,24 @@ Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置
139188

140189
3. 实用插件推荐
141190

191+
要启用插件,需要编辑 Zsh 配置文件:
192+
193+
```bash
194+
nano ~/.zshrc
195+
```
196+
197+
找到 plugins=(git) 这行,添加你想要的插件:
198+
199+
```bash
200+
plugins=(git sudo z extract autojump)
201+
```
202+
203+
保存后运行:
204+
205+
```bash
206+
source ~/.zshrc
207+
```
208+
142209
```bash
143210
omz plugin list # 查看插件列表
144211

@@ -149,11 +216,13 @@ Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置
149216

150217
常用插件介绍:
151218

152-
- **git**:提供 git 命令的别名和补全
153-
- **sudo**:双击 ESC 键自动在命令前添加 sudo
154-
- **z**:快速跳转到常访问的目录
155-
- **extract**:智能解压各种格式的压缩文件
156-
- **autojump**:基于历史记录的目录跳转
219+
| 插件 | 功能 | 使用示例 |
220+
|------------|------|----------|
221+
| **git** | 提供 git 别名 | 输入`gst` = `git status`<br>`gco main` = `git checkout main` |
222+
| **sudo** | 快速提权 | 输入`apt update` → 按两次`ESC` → 自动变成`sudo apt update` |
223+
| **z** | 目录跳转 | `z doc` → 跳转到`~/Documents`<br>`z down` → 跳转到`~/Downloads` |
224+
| **extract**| 智能解压 | `extract archive.zip` 自动识别解压<br>`extract file.tar.gz` 自动解压 |
225+
| **autojump**| 历史跳转 | `j proj` → 跳转到最近访问的包含"proj"的目录 |
157226

158227
4. 主题配置
159228

@@ -183,16 +252,16 @@ Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置
183252
- **Tab 补全**:支持文件名、命令、参数的智能补全
184253
- **目录补全**:输入目录名的一部分,按 Tab 键自动补全
185254

186-
!!! tip
187-
配置完成后,重新加载配置文件:
255+
!!! tip
256+
配置完成后,重新加载配置文件:
188257

189-
```bash
190-
source ~/.zshrc
191-
```
258+
```bash
259+
source ~/.zshrc
260+
```
192261

193262
### 3. [uv:Python 包管理利器](https://github.com/astral-sh/uv)
194263

195-
uv 是一个极快的 Python 包管理器和项目管理工具,由 Rust 编写,旨在替代或补充 pip、pipenv 等传统工具。
264+
uv 是一个极快的 Python 包管理器和项目管理工具,由 Rust 编写,旨在替代或补充 pip、pipenv 等传统工具。其解决了 Python 包安装慢/冲突多的痛点。
196265

197266
1. uv 的优势
198267

@@ -205,6 +274,22 @@ uv 是一个极快的 Python 包管理器和项目管理工具,由 Rust 编写
205274

206275
2. 安装和基本使用
207276

277+
!!! note "虚拟环境就像隔离的工作区"
278+
- 想象你有两个项目:项目 A 需要 Python 3.8,项目 B 需要 Python 3.11
279+
- 虚拟环境就是独立的"工作房间":
280+
281+
```bash
282+
uv venv projA-env # 创建 A 项目的房间
283+
source projA-env/bin/activate # 进入 A 房间
284+
uv add numpy==1.21 # 在 A 房间安装特定版本
285+
286+
uv venv projB-env # 创建 B 项目的房间
287+
source projB-env/bin/activate # 进入 B 房间
288+
uv add numpy==1.25 # 在 B 房间安装新版
289+
```
290+
291+
- 两个项目完全隔离,不会互相干扰!
292+
208293
安装 uv:
209294

210295
```bash
@@ -301,13 +386,22 @@ btop 是一个漂亮且功能丰富的系统资源监视器,用于显示处理
301386

302387
4. 常用快捷键
303388

304-
- `q`:退出 btop
305-
- `h`:显示帮助
306-
- `↑/↓`:在进程列表中导航
307-
- `F5`:选择排序方式
308-
- `t`:切换进程树视图
309-
- `k`:终止选中的进程
310-
- `+/-`:增加/减少更新间隔
389+
| 按键 | 功能 | 新手用途 |
390+
|---------------|---------------------|------------------------------|
391+
| `q` | 退出 btop | 关闭监控程序 |
392+
| `h``F1` | 显示帮助 | 查看完整快捷键指南 |
393+
| `↑/↓` | 在进程列表中导航 | 上下移动选择进程 |
394+
| `F5` | 选择排序方式 | 按 CPU/内存/进程 ID 等排序 |
395+
| `t` | 切换进程树视图 | 显示进程父子关系 |
396+
| `k` | 终止选中的进程 | 结束卡死的程序 |
397+
| `+` | 增加更新间隔 | 减慢刷新速度(节省资源) |
398+
| `-` | 减少更新间隔 | 加快刷新速度(实时监控) |
399+
| `p` | 进程管理 | 查看所有运行中的程序 |
400+
| `s` | 磁盘监控 | 检查硬盘使用情况 |
401+
| `n` | 网络监控 | 查看网络流量和连接 |
402+
| `ESC` | 返回上级 | 退出当前菜单或操作 |
403+
| `1-9` | 切换监控页面 | 快速查看不同资源(CPU/内存等)|
404+
| `TAB` | 切换主区域 | 在进程列表和资源图表间切换 |
311405

312406
### 5. [tldr:通俗易懂的 man](https://github.com/tldr-pages/tldr)
313407

@@ -372,8 +466,8 @@ tldr(Too Long; Didn't Read)是一个社区维护的帮助页面集合,旨
372466
# 输出:基本的 git 操作示例
373467
```
374468

375-
!!! tip
376-
当你忘记某个命令的具体用法时,先试试`tldr`,它通常能比`man`更快地给你想要的答案。
469+
!!! tip
470+
当你忘记某个命令的具体用法时,先试试`tldr`,它通常能比`man`更快地给你想要的答案。
377471

378472
### 6. [better-commits:优雅的 Git 提交助手](https://github.com/Everduin94/better-commits)
379473

@@ -419,11 +513,25 @@ better-commits 是一个交互式的 Git 提交工具,帮助开发者编写更
419513

420514
运行 `bc` 后,工具会引导你完成以下步骤:
421515

422-
- **选择提交类型**:feat(新功能)、fix(修复)、docs(文档)等
423-
- **输入作用域**:变更影响的模块或组件(可选)
424-
- **编写描述**:简洁明了的变更描述
425-
- **详细说明**:更详细的变更内容(可选)
426-
- **破坏性变更**:是否包含不兼容变更(可选)
516+
**选择提交类型**
517+
- 使用↑↓箭头选择,Enter 确认
518+
- 最常用:`feat`(新功能), `fix`(修复)
519+
520+
**输入作用域**(可选):
521+
- 输入模块名如`login`, `payment`
522+
- 按 Enter 跳过
523+
524+
**编写简短描述**
525+
- 要求:首字母小写,不加句号
526+
- 示例:"add password validation"
527+
528+
**详细说明**(可选):
529+
- 解释为什么做这个修改
530+
- 按 Ctrl+D 结束输入
531+
532+
**破坏性变更确认**
533+
- 只有重大变更才选 Yes
534+
- 会自动添加`!`标记
427535

428536
5. 配置自定义
429537

@@ -449,9 +557,50 @@ better-commits 是一个交互式的 Git 提交工具,帮助开发者编写更
449557
}
450558
```
451559

452-
!!! tip
453-
使用 better-commits 可以让团队的 Git 提交历史更加规范,便于生成变更日志和版本发布说明。
560+
!!! tip
561+
使用 better-commits 可以让团队的 Git 提交历史更加规范,便于生成变更日志和版本发布说明。
562+
563+
```mermaid
564+
sequenceDiagram
565+
participant 开发者
566+
participant better-commits
567+
开发者->>better-commits: 输入 bc
568+
better-commits-->>开发者: 引导选择提交类型
569+
开发者->>better-commits: 选择 feat (新功能)
570+
better-commits-->>开发者: 提示输入描述
571+
开发者->>better-commits: 输入「添加登录功能」
572+
better-commits->>Git: 生成标准提交: feat: 添加登录功能
573+
```
574+
575+
## 工具选择流程图
576+
577+
```mermaid
578+
graph TD
579+
A[需要哪类工具?]
580+
A --> B{防止工作丢失}
581+
A --> C{美化/增强终端}
582+
A --> D{Python开发}
583+
A --> E{系统监控}
584+
A --> F{命令帮助}
585+
A --> G{Git提交}
586+
587+
B --> H[tmux]
588+
C --> I[Oh My Zsh]
589+
D --> J[uv]
590+
E --> K[btop]
591+
F --> L[tldr]
592+
G --> M[better-commits]
593+
594+
style H fill:#9f9,stroke:#333
595+
style I fill:#9f9,stroke:#333
596+
style J fill:#9f9,stroke:#333
597+
style K fill:#9f9,stroke:#333
598+
style L fill:#9f9,stroke:#333
599+
style M fill:#9f9,stroke:#333
600+
```
454601

455602
## 参考资料
456603

457604
- [Tmux 使用教程](https://www.ruanyifeng.com/blog/2019/10/tmux.html)
605+
- [Linux 新手生存指南](https://linuxnewbieguide.org)
606+
- [命令行艺术](https://github.com/jlevy/the-art-of-command-line)

0 commit comments

Comments
 (0)