diff --git a/docs/ch3/sec4/1-useful-oss.md b/docs/ch3/sec4/1-useful-oss.md
index 166a7e8..2ada64a 100644
--- a/docs/ch3/sec4/1-useful-oss.md
+++ b/docs/ch3/sec4/1-useful-oss.md
@@ -12,12 +12,21 @@
### 1. [tmux:会话管理魔法](https://github.com/tmux/tmux)
+**适用场景**:当你在服务器上工作时突然断网,所有任务都会丢失?tmux 能解决这个问题!
+
1. 前置知识:窗口与会话
+
+ 许多初学者容易混淆终端、控制台、shell 和解释器这几个概念。我们来简单区分一下:
+
+ **终端(Terminal)**:是你看到的黑色窗口,允许你输入命令的界面。
+ **Shell(壳程序)**:是一个命令解释器,运行在终端内,比如常见的 `bash`、`zsh`。
+ **会话(Session)**:是 shell 或程序运行的实例,比如你登录系统后打开一个终端窗口,它就是一个会话。
- 简单来说,无论是使用 SSH 还是 Linux 桌面自带的命令行,你所看到的那个黑色的“框框”便是一个窗口;在窗口中,运行了一个 shell 解释器(bash,sh,zsh 等等)或者其他应用程序,每个运行的程序进程被称为一个“会话”。
+!!! note
+ Shell 本身是一个程序,它负责解析你输入的命令并交由系统执行。不同的 shell 功能略有差异,比如 `bash` 是默认的,`zsh` 更强大。
- !!! note
- 何为"解释器"?解释器是一个交互的,实时运行的命令环境。解释器可以使用很多语言,如 shell、powershell 和 python。
+!!! note
+ 何为"解释器"?解释器是一个交互的,实时运行的命令环境。解释器可以使用很多语言,如 shell、powershell 和 python。
很多同学可能会认为"解释器是操作系统的一部分",这实际上是不准确的:在 Linux 中,各发行版通常都预装了一个解释器,但我们也完全可以自行安装更好的解释器。在 Windows 中,系统的确提供了一个底层解释器 cmd,但用户也可以选择使用 PowerShell、Git Bash 等其他解释器。
@@ -30,6 +39,14 @@
- 分离会话并在稍后重新连接,即在后台运行任务
- 创建分屏布局,同时查看多个会话
+ ```mermaid
+ graph LR
+ A[SSH 连接] --> B[tmux 会话]
+ B --> C[关闭 SSH]
+ C --> D[重新连接]
+ D --> E[恢复工作状态]
+ ```
+
3. tmux 的基本概念
tmux 有三个重要概念:
@@ -38,6 +55,14 @@
- **窗口(Window)**:类似于浏览器的标签页,每个窗口包含一个或多个窗格
- **窗格(Pane)**:窗口的分割部分,每个窗格运行一个 shell
+!!! tip "新手理解"
+ 想象你正在用浏览器:
+
+ **窗口** = 浏览器窗口
+ **标签页** = tmux 的窗口 (Window)
+ **分屏浏览** = tmux 的窗格 (Pane)
+ **会话** = 保存所有标签页和分屏的完整工作状
+
当我们使用不带任何参数的`tmux`时,tmux 会为我们创建一个新的**会话**,这个会话中有一个**窗口**,窗口中有一个**窗格**。
我们可以通过 tmux 会话下方的信息条查看该会话中**窗口**的数量和名称。
@@ -70,6 +95,21 @@
tmux detach
```
+!!! tip "什么是分离会话?"
+ 想象你在办公室工作到一半需要离开:
+ 1. 把文件留在桌上(分离会话)= `Ctrl+b d`
+ 2. 下班回家(断开SSH)
+ 3. 第二天回来(重新连接SSH)
+ 4. 坐回桌前继续工作(连接会话)= `tmux attach`
+ 你的工作状态完全保留,就像从未离开过!
+
+!!! tip "重要提示"
+ tmux 的所有快捷键都需要先按**前缀键**(默认是`Ctrl+b`),然后松开,再按功能键。例如:
+ - 分屏:先按`Ctrl+b`,松开,再按`%`(垂直)或`"`(水平)
+ - 切换窗口:先按`Ctrl+b`,松开,再按数字键`0-9`
+
+ 记忆技巧:把`Ctrl+b`想象成"告诉tmux我要发命令了"
+
以下是对**窗格**的操作快捷键:
- `Ctrl+b + %`:垂直分屏
@@ -87,22 +127,31 @@
- `Ctrl+b + ,`:重命名窗口
- `Ctrl+b + &`:关闭当前窗口
- !!! example
- 如果我们想创建一个如下布局的窗口,我们需要执行以下操作:
- 
+!!! example
+ 如果我们想创建一个如下布局的窗口,我们需要执行以下操作:
+ 
- ```bash
- tmux # 进入 tmux 环境
+ ```bash
+ tmux # 进入 tmux 环境
- # Ctrl+b % 创建垂直分屏
- # Ctrl+b " 创建水平分屏
- # Ctrl+b ← 返回最初始的分屏
+ # Ctrl+b % 创建垂直分屏
+ # Ctrl+b " 创建水平分屏
+ # Ctrl+b ← 返回最初始的分屏
+ ```
- ```
+!!! bug "新手常见问题"
+ 断开后如何恢复?
+
+ ```bash
+ # 列出所有会话
+ tmux ls
+ # 重新连接
+ tmux attach -t work
+ ```
### 2. [Oh My Zsh:实用的 shell 解释器框架](https://ohmyz.sh/)
-Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置。它提供了数百个插件和主题,让你的命令行体验更加强大和美观。
+Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置。它提供了数百个插件和主题,让你的命令行体验更加强大和美观。同时自带错误纠正和智能提示。
1. Oh My Zsh 的作用
@@ -139,6 +188,24 @@ Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置
3. 实用插件推荐
+要启用插件,需要编辑 Zsh 配置文件:
+
+ ```bash
+ nano ~/.zshrc
+ ```
+
+找到 plugins=(git) 这行,添加你想要的插件:
+
+ ```bash
+ plugins=(git sudo z extract autojump)
+ ```
+
+保存后运行:
+
+ ```bash
+ source ~/.zshrc
+ ```
+
```bash
omz plugin list # 查看插件列表
@@ -149,11 +216,13 @@ Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置
常用插件介绍:
-- **git**:提供 git 命令的别名和补全
-- **sudo**:双击 ESC 键自动在命令前添加 sudo
-- **z**:快速跳转到常访问的目录
-- **extract**:智能解压各种格式的压缩文件
-- **autojump**:基于历史记录的目录跳转
+| 插件 | 功能 | 使用示例 |
+|------------|------|----------|
+| **git** | 提供 git 别名 | 输入`gst` = `git status`
`gco main` = `git checkout main` |
+| **sudo** | 快速提权 | 输入`apt update` → 按两次`ESC` → 自动变成`sudo apt update` |
+| **z** | 目录跳转 | `z doc` → 跳转到`~/Documents`
`z down` → 跳转到`~/Downloads` |
+| **extract**| 智能解压 | `extract archive.zip` 自动识别解压
`extract file.tar.gz` 自动解压 |
+| **autojump**| 历史跳转 | `j proj` → 跳转到最近访问的包含"proj"的目录 |
4. 主题配置
@@ -183,16 +252,16 @@ Oh My Zsh 是一个开源的、社区驱动的框架,用于管理 Zsh 配置
- **Tab 补全**:支持文件名、命令、参数的智能补全
- **目录补全**:输入目录名的一部分,按 Tab 键自动补全
- !!! tip
- 配置完成后,重新加载配置文件:
+!!! tip
+ 配置完成后,重新加载配置文件:
- ```bash
- source ~/.zshrc
- ```
+ ```bash
+ source ~/.zshrc
+ ```
### 3. [uv:Python 包管理利器](https://github.com/astral-sh/uv)
-uv 是一个极快的 Python 包管理器和项目管理工具,由 Rust 编写,旨在替代或补充 pip、pipenv 等传统工具。
+uv 是一个极快的 Python 包管理器和项目管理工具,由 Rust 编写,旨在替代或补充 pip、pipenv 等传统工具。其解决了 Python 包安装慢/冲突多的痛点。
1. uv 的优势
@@ -205,6 +274,22 @@ uv 是一个极快的 Python 包管理器和项目管理工具,由 Rust 编写
2. 安装和基本使用
+!!! note "虚拟环境就像隔离的工作区"
+ - 想象你有两个项目:项目 A 需要 Python 3.8,项目 B 需要 Python 3.11
+ - 虚拟环境就是独立的"工作房间":
+
+ ```bash
+ uv venv projA-env # 创建 A 项目的房间
+ source projA-env/bin/activate # 进入 A 房间
+ uv add numpy==1.21 # 在 A 房间安装特定版本
+
+ uv venv projB-env # 创建 B 项目的房间
+ source projB-env/bin/activate # 进入 B 房间
+ uv add numpy==1.25 # 在 B 房间安装新版
+ ```
+
+ - 两个项目完全隔离,不会互相干扰!
+
安装 uv:
```bash
@@ -301,13 +386,22 @@ btop 是一个漂亮且功能丰富的系统资源监视器,用于显示处理
4. 常用快捷键
-- `q`:退出 btop
-- `h`:显示帮助
-- `↑/↓`:在进程列表中导航
-- `F5`:选择排序方式
-- `t`:切换进程树视图
-- `k`:终止选中的进程
-- `+/-`:增加/减少更新间隔
+| 按键 | 功能 | 新手用途 |
+|---------------|---------------------|------------------------------|
+| `q` | 退出 btop | 关闭监控程序 |
+| `h` 或 `F1` | 显示帮助 | 查看完整快捷键指南 |
+| `↑/↓` | 在进程列表中导航 | 上下移动选择进程 |
+| `F5` | 选择排序方式 | 按 CPU/内存/进程 ID 等排序 |
+| `t` | 切换进程树视图 | 显示进程父子关系 |
+| `k` | 终止选中的进程 | 结束卡死的程序 |
+| `+` | 增加更新间隔 | 减慢刷新速度(节省资源) |
+| `-` | 减少更新间隔 | 加快刷新速度(实时监控) |
+| `p` | 进程管理 | 查看所有运行中的程序 |
+| `s` | 磁盘监控 | 检查硬盘使用情况 |
+| `n` | 网络监控 | 查看网络流量和连接 |
+| `ESC` | 返回上级 | 退出当前菜单或操作 |
+| `1-9` | 切换监控页面 | 快速查看不同资源(CPU/内存等)|
+| `TAB` | 切换主区域 | 在进程列表和资源图表间切换 |
### 5. [tldr:通俗易懂的 man](https://github.com/tldr-pages/tldr)
@@ -372,8 +466,8 @@ tldr(Too Long; Didn't Read)是一个社区维护的帮助页面集合,旨
# 输出:基本的 git 操作示例
```
- !!! tip
- 当你忘记某个命令的具体用法时,先试试`tldr`,它通常能比`man`更快地给你想要的答案。
+!!! tip
+ 当你忘记某个命令的具体用法时,先试试`tldr`,它通常能比`man`更快地给你想要的答案。
### 6. [better-commits:优雅的 Git 提交助手](https://github.com/Everduin94/better-commits)
@@ -419,11 +513,25 @@ better-commits 是一个交互式的 Git 提交工具,帮助开发者编写更
运行 `bc` 后,工具会引导你完成以下步骤:
-- **选择提交类型**:feat(新功能)、fix(修复)、docs(文档)等
-- **输入作用域**:变更影响的模块或组件(可选)
-- **编写描述**:简洁明了的变更描述
-- **详细说明**:更详细的变更内容(可选)
-- **破坏性变更**:是否包含不兼容变更(可选)
+ **选择提交类型**:
+ - 使用↑↓箭头选择,Enter 确认
+ - 最常用:`feat`(新功能), `fix`(修复)
+
+ **输入作用域**(可选):
+ - 输入模块名如`login`, `payment`
+ - 按 Enter 跳过
+
+ **编写简短描述**:
+ - 要求:首字母小写,不加句号
+ - 示例:"add password validation"
+
+ **详细说明**(可选):
+ - 解释为什么做这个修改
+ - 按 Ctrl+D 结束输入
+
+ **破坏性变更确认**:
+ - 只有重大变更才选 Yes
+ - 会自动添加`!`标记
5. 配置自定义
@@ -449,9 +557,50 @@ better-commits 是一个交互式的 Git 提交工具,帮助开发者编写更
}
```
- !!! tip
- 使用 better-commits 可以让团队的 Git 提交历史更加规范,便于生成变更日志和版本发布说明。
+!!! tip
+ 使用 better-commits 可以让团队的 Git 提交历史更加规范,便于生成变更日志和版本发布说明。
+
+```mermaid
+sequenceDiagram
+ participant 开发者
+ participant better-commits
+ 开发者->>better-commits: 输入 bc
+ better-commits-->>开发者: 引导选择提交类型
+ 开发者->>better-commits: 选择 feat (新功能)
+ better-commits-->>开发者: 提示输入描述
+ 开发者->>better-commits: 输入「添加登录功能」
+ better-commits->>Git: 生成标准提交: feat: 添加登录功能
+```
+
+## 工具选择流程图
+
+```mermaid
+graph TD
+ A[需要哪类工具?]
+ A --> B{防止工作丢失}
+ A --> C{美化/增强终端}
+ A --> D{Python开发}
+ A --> E{系统监控}
+ A --> F{命令帮助}
+ A --> G{Git提交}
+
+ B --> H[tmux]
+ C --> I[Oh My Zsh]
+ D --> J[uv]
+ E --> K[btop]
+ F --> L[tldr]
+ G --> M[better-commits]
+
+ style H fill:#9f9,stroke:#333
+ style I fill:#9f9,stroke:#333
+ style J fill:#9f9,stroke:#333
+ style K fill:#9f9,stroke:#333
+ style L fill:#9f9,stroke:#333
+ style M fill:#9f9,stroke:#333
+```
## 参考资料
- [Tmux 使用教程](https://www.ruanyifeng.com/blog/2019/10/tmux.html)
+- [Linux 新手生存指南](https://linuxnewbieguide.org)
+- [命令行艺术](https://github.com/jlevy/the-art-of-command-line)