Skip to content

Commit

Permalink
fix: preliminary writing style fix (#26)
Browse files Browse the repository at this point in the history
may need further modifications after agreeing up the writing guidelines.
  • Loading branch information
djdjz7 authored Nov 14, 2024
1 parent 0e57ac0 commit dc527c2
Show file tree
Hide file tree
Showing 10 changed files with 309 additions and 302 deletions.
2 changes: 1 addition & 1 deletion basic/02-searching-and-question.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@

一般而言,你可以在相应技术的官网上找到官方文档的入口。比如 Python 的官方文档就可以在 [Python 官网](https://www.python.org/) 上找到。

除此之外,很多 Linux 命令行工具带有丰富的 mandoc 文档,可以通过 man 命令查看。man 也含有关于 Linux 系统调用,POSIX 规范和其他杂项手册。比如输入`man signal.7`可以看到 Unix 信号的介绍,输入`man signal.2`可以看到`signal()`系统调用的相关信息,而输入`man signal.3`可以看到 POSIX 规范中`signal()`这个 API 的定义和用法。
除此之外,很多 Linux 命令行工具带有丰富的 mandoc 文档,可以通过 man 命令查看。man 也含有关于 Linux 系统调用,POSIX 规范和其他杂项手册。比如输入 `man signal.7` 可以看到 Unix 信号的介绍,输入 `man signal.2` 可以看到 `signal()` 系统调用的相关信息,而输入 `man signal.3` 可以看到 POSIX 规范中 `signal()` 这个 API 的定义和用法。

::: tip 小贴士!
man 的用法可以通过 man man 查阅。你可能会疑惑,在刚刚的例子中,最后的点后面的数字是什么意思,在读完 man 的用法之后相信你就明白了!
Expand Down
6 changes: 3 additions & 3 deletions basic/03-computer-basic-knowledge-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ Windows 有一个臭名昭著的“功能”————蓝屏死机,Blue Scre

#### 其他操作系统

- MacOS: 苹果专用,符合 POSIX 标准的 Unix 系统,老版本可在 Intel 机器安装(需要魔法),内核叫 Darwin,修改自 BSD 系内核,内核部分开源
- macOS: 苹果专用,符合 POSIX 标准的 Unix 系统,老版本可在 Intel 机器安装(需要魔法),内核叫 Darwin,修改自 BSD 系内核,内核部分开源
- FreeBSD: 符合 POSIX 标准的类 Unix 系统,和 Linux 只是内核不同,FreeBSD 带有完整的用户态程序,同时其采用更宽松的许可协议,而不是 Linux 的 GPLv2。
- MSDOS: 古老的操作系统,无图形界面,已不使用,微软近期开源了几个版本的 DOS。FreeDOS 则是由其他志愿者实现的开源版本替代。

Expand Down Expand Up @@ -344,12 +344,12 @@ TCP 是在 IP 之上的协议,利用 IP 协议提供的不可靠数据传输
:::

::: info 提示
指定端口号的地址,IPv4 可以写作 127.0.0.1:8080 这种形式,IPv6 可以写成[::1]:8080 的形式。
指定端口号的地址,IPv4 可以写作 127.0.0.1:8080 这种形式,IPv6 可以写成 [::1]:8080 的形式。
:::

### DNS 协议

DNS(Domain Name System)协议是用于解析域名信息的协议。我们在日常上网的过程中,由于 IP 地址过于抽象难记,经常会使用类似于`pku.edu.cn`这样的域名,DNS 就是将域名转化为 IP 地址的服务。DNS 服务从点分隔的域名的最后一部分开始查找,整个查找过程先向系统预设的 DNS 服务器查找最后一部分`cn`,返回`cn`域名的服务器,然后向`cn`域名的服务器继续询问`edu`,直到整个域名解析完成,得到最终的 IP 地址。实际情况下,有时候 DNS 服务器会直接返回下一级域名服务器作为结果,也有时候会代替你继续查询,直接返回给你最终的结果。
DNS(Domain Name System)协议是用于解析域名信息的协议。我们在日常上网的过程中,由于 IP 地址过于抽象难记,经常会使用类似于 `pku.edu.cn` 这样的域名,DNS 就是将域名转化为 IP 地址的服务。DNS 服务从点分隔的域名的最后一部分开始查找,整个查找过程先向系统预设的 DNS 服务器查找最后一部分 `cn`,返回 `cn` 域名的服务器,然后向 `cn` 域名的服务器继续询问 `edu`,直到整个域名解析完成,得到最终的 IP 地址。实际情况下,有时候 DNS 服务器会直接返回下一级域名服务器作为结果,也有时候会代替你继续查询,直接返回给你最终的结果。

::: info 提示
以前国内的网络运营商默认提供的 DNS 有时会遭到污染,进行植入广告等操作,这时候你可以自行更换 DNS 地址,你可以在互联网上查询到关于如何更换以及更换为哪些声誉较好的 DNS 服务的信息。
Expand Down
194 changes: 96 additions & 98 deletions basic/05-drive-your-computer-1.md

Large diffs are not rendered by default.

24 changes: 12 additions & 12 deletions basic/06-drive-your-computer-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,13 @@ git init

我们可能需要对仓库进行一些配置,比如设置用户名和邮箱,设置代理等等。

配置 Git 只需要用到 config 子命令。如果需要修改全局设置,可以加上`--global`参数,如果需要打开配置文件进行编辑,可以加上`--edit`参数。现在我们修改一下全局参数,执行:
配置 Git 只需要用到 config 子命令。如果需要修改全局设置,可以加上 `--global` 参数,如果需要打开配置文件进行编辑,可以加上 `--edit` 参数。现在我们修改一下全局参数,执行:

```shell
git config --global --edit
```

然后你的终端应该会打开一个文本编辑器(可能是 vim,在 Windows 上也可能是记事本之类的),然后在`[user]`模块下找到`name = xxx``email = xxx@xxx`,将两者修改为自己的信息。如果这两行不存在,你可以在`[user]`后另起一行,加上这两行信息,如果`[user]`也不存在,你可以在文件末尾另起一行加上。很多代码托管平台,比如 GitHub,使用提交的邮箱判断提交的作者。
然后你的终端应该会打开一个文本编辑器(可能是 vim,在 Windows 上也可能是记事本之类的),然后在 `[user]` 模块下找到 `name = xxx` `email = xxx@xxx`,将两者修改为自己的信息。如果这两行不存在,你可以在 `[user]` 后另起一行,加上这两行信息,如果 `[user]` 也不存在,你可以在文件末尾另起一行加上。很多代码托管平台,比如 GitHub,使用提交的邮箱判断提交的作者。

由于众所周知的原因,你可能需要使用代理。请在文件末尾另起一行,填写以下内容,其中链接需要填写你自己的链接:

Expand Down Expand Up @@ -162,7 +162,7 @@ git status
git commit
```

会弹出文本编辑器,请在第一行写你的提交信息,比如`My first commit`,然后退出编辑器。或者你也可以执行:
会弹出文本编辑器,请在第一行写你的提交信息,比如 `My first commit`,然后退出编辑器。或者你也可以执行:

```shell
git commit -m "My first commit
Expand Down Expand Up @@ -191,9 +191,9 @@ git status
总结一下,git 整体的工作流程就是修改-暂存-提交-下一轮修改-……这样一直进行。
如果你觉得暂存操作比较麻烦,可以加上`-a`参数,此参数会在提交前自动暂存修改过和删除的文件,但是新的文件不会被包括进来。
如果你觉得暂存操作比较麻烦,可以加上 `-a` 参数,此参数会在提交前自动暂存修改过和删除的文件,但是新的文件不会被包括进来。
有时候上一个提交还没有完成,你可以使用`--amend`参数修订上一个提交。
有时候上一个提交还没有完成,你可以使用 `--amend` 参数修订上一个提交。
### 查看并回退到指定历史版本
Expand Down Expand Up @@ -297,7 +297,7 @@ git reset --hard 7a6ab
### 排除掉特定的文件
有时候一些文件不应该被版本管理系统追踪,如编译生成的目标文件,可执行文件,一些敏感配置等等。我们可以使用`.gitignore`文件来排除指定文件和文件夹。执行以下内容:
有时候一些文件不应该被版本管理系统追踪,如编译生成的目标文件,可执行文件,一些敏感配置等等。我们可以使用 `.gitignore` 文件来排除指定文件和文件夹。执行以下内容:
```shell
mkdir confidential
Expand Down Expand Up @@ -337,7 +337,7 @@ git status
```
可以发现`credential`目录和所有的`.o`文件都被忽略了。
可以发现 `credential` 目录和所有的 `.o` 文件都被忽略了。
最后我们执行
Expand Down Expand Up @@ -398,7 +398,7 @@ git branch update-example 37f7d
git checkout update-example
```
然后我们将文件`example1.txt`改为`Hello, Git2!`,执行:
然后我们将文件 `example1.txt` 改为 `Hello, Git2!`,执行:
```shell
git commit -am "Branch!"
Expand Down Expand Up @@ -453,7 +453,7 @@ git merge merge-example
自动合并失败,修正冲突然后提交修正的结果。
```
我们打开`example1.txt`查看内容:
我们打开 `example1.txt` 查看内容:
```plain
<<<<<<< HEAD
Expand Down Expand Up @@ -501,14 +501,14 @@ git clone url://path/to/be/cloned
git pull
```
如果本地有远端不存在的提交,则拉取代码不能以默认的“fast-forward”方式进行,因此需要指定`--no-ff`参数进行合并拉取或者指定`--rebase`进行变基拉取。在特别有必要时,也可以直接 hard reset 到远端 HEAD 处。
如果本地有远端不存在的提交,则拉取代码不能以默认的 “fast-forward” 方式进行,因此需要指定 `--no-ff` 参数进行合并拉取或者指定 `--rebase` 进行变基拉取。在特别有必要时,也可以直接 hard reset 到远端 HEAD 处。
#### 推送代码
在工作完成,提交完成之后,可以用这个子命令将修改推送至远端。若有远端有本地没有的提交,需要先进行拉取,才能推送,或者`--force`强制推送,此时不一致的提交会被本地提交代替。
在工作完成,提交完成之后,可以用这个子命令将修改推送至远端。若有远端有本地没有的提交,需要先进行拉取,才能推送,或者 `--force` 强制推送,此时不一致的提交会被本地提交代替。
::: danger 警告
使用`--force`参数前请三思,仔细检查你将要提交的内容!
使用 `--force` 参数前请三思,仔细检查你将要提交的内容!
:::
#### 图形化工具的使用
Expand Down
22 changes: 11 additions & 11 deletions basic/07-drive-your-computer-3.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

如需查看磁盘占用情况,Windows 和 Linux 下的文件管理器都能直观地提供以上信息,故此不再详述。

如需查看磁盘健康情况,可以使用`smartctl`命令(Linux)或者 CrystalDiskInfo 软件(Windows)查看。
如需查看磁盘健康情况,可以使用 `smartctl` 命令(Linux)或者 CrystalDiskInfo 软件(Windows)查看。

![CrystalDiskInfo](../assets/basic/07-drive-your-computer-3/image.png)
图 1. 笔者使用 CrystalDiskInfo 查看磁盘信息
Expand All @@ -28,7 +28,7 @@ Windows 下任务管理器即可,Linux 下推荐`btop`程序。

### 电池信息 {#battery-info}

Windows 下可以使用自带的`powercfg`命令生成 html 格式的电池信息报告,Linux 下可以使用`upower`命令查看
Windows 下可以使用自带的 `powercfg` 命令生成 html 格式的电池信息报告,Linux 下可以使用 `upower` 命令查看

### 视频信息 {#video-info}

Expand All @@ -44,7 +44,7 @@ Windows 下可以使用自带的`powercfg`命令生成 html 格式的电池信

蓝屏(BSOD, Blue Screen of Death),通常意味着 Windows 内核发生了不可恢复的故障。常见的蓝屏原因包括系统服务异常(多是驱动导致),关键进程退出(可能是病毒引起),机器检查(硬件故障)等。如果最近新安装了硬件,可以考虑移除它们再试试,如果怀疑是驱动问题或者是病毒问题,可以考虑进入安全模式:

- 如果你还能进入系统:按下`Win+R`输入`msconfig`并回车,点击“引导”选项卡,勾选“安全启动”,点击应用,重启即可。
- 如果你还能进入系统:按下 `Win+R` 输入 `msconfig` 并回车,点击“引导”选项卡,勾选“安全启动”,点击应用,重启即可。

- 如果你不能进入系统:启动失败若干次后应该会出现恢复菜单,点击“疑难解答”-“高级选项”-“启动设置”,会提示重启进入安全模式。

Expand All @@ -54,37 +54,37 @@ Windows 下可以使用自带的`powercfg`命令生成 html 格式的电池信

完成所有操作后,如果使用 msconfig 设置了安全模式,应当先取消勾选然后应用,然后重启回到正常模式看问题是否解决。

如果你想向驱动作者报告问题,可以使用 WinDbg 调试内核转储文件,在 WinDbg 中打开转储文件,使用`!analyze -v`获取完整分析报告。WinDbg 可以在应用商店中免费获取。
如果你想向驱动作者报告问题,可以使用 WinDbg 调试内核转储文件,在 WinDbg 中打开转储文件,使用 `!analyze -v` 获取完整分析报告。WinDbg 可以在应用商店中免费获取。

### 内核恐慌 {#panic}

Linux 内核的严重错误被叫做 panic。其实由于 Linux 用户态和内核态耦合更低,且 Linux 本身容错能力更好,Linux panic 遇见的频率相对更低,常见的原因也不外乎驱动故障,1 号进程退出等。一般来说,部分硬件厂商为 Linux 提供的驱动问题较多,除了卸载驱动以外,还需要和驱动开发者和 Linux 内核维护者进行沟通,以取得更好的解决方案。

### 应用软件崩溃 {#application-crash}

这种情况比较复杂,有可能是软件本身的 bug,也有可能是用户的环境或者使用软件的方式的问题。部分软件带有崩溃反馈模块,你可以用这个模块向开发者反馈信息。在反馈之前,请先确保你的软件是最新的,因为你发现的故障可能在新版本中已经被修复,同时需确保你正确使用软件。然后向开发者反馈故障时,尽可能给出软件版本、操作系统版本、库版本(如果有需要)、硬件型号等信息,同时需给出较为详细的复现故障的步骤,必要时附上日志和截图(不要在正文中放大段日志,最好以附件或者在线剪贴板链接,如[gist](https://gist.github.com/)的形式给出)。如果你使用 Linux 并且恰好开启了核心转储,你也可以调试转储文件(例如使用`coredumpctl -r debug`,然后输入`bt`),给出栈回溯信息等。
这种情况比较复杂,有可能是软件本身的 bug,也有可能是用户的环境或者使用软件的方式的问题。部分软件带有崩溃反馈模块,你可以用这个模块向开发者反馈信息。在反馈之前,请先确保你的软件是最新的,因为你发现的故障可能在新版本中已经被修复,同时需确保你正确使用软件。然后向开发者反馈故障时,尽可能给出软件版本、操作系统版本、库版本(如果有需要)、硬件型号等信息,同时需给出较为详细的复现故障的步骤,必要时附上日志和截图(不要在正文中放大段日志,最好以附件或者在线剪贴板链接,如 [gist](https://gist.github.com/) 的形式给出)。如果你使用 Linux 并且恰好开启了核心转储,你也可以调试转储文件(例如使用 `coredumpctl -r debug`,然后输入 `bt`),给出栈回溯信息等。

如果你想自行调试,首先你可以寻找软件是否提供了调试符号包,在没有调试符号包和源码的情况下调试将会是非常困难的,而且两者都不提供的软件通常在许可上不允许你做调试(因为会涉及反汇编),除非万不得已,不建议自行调试这种软件。如果没有调试符号包但是有源码,你可以尝试在干净的环境中重新构建带调试符号的软件包,对于用 gcc 编译的软件,可以考虑加上编译参数`-g`。同时不建议使用较高的优化等级,这会给调试带来困难,除非你确信是高优化等级导致的问题。
如果你想自行调试,首先你可以寻找软件是否提供了调试符号包,在没有调试符号包和源码的情况下调试将会是非常困难的,而且两者都不提供的软件通常在许可上不允许你做调试(因为会涉及反汇编),除非万不得已,不建议自行调试这种软件。如果没有调试符号包但是有源码,你可以尝试在干净的环境中重新构建带调试符号的软件包,对于用 gcc 编译的软件,可以考虑加上编译参数 `-g`。同时不建议使用较高的优化等级,这会给调试带来困难,除非你确信是高优化等级导致的问题。

### 系统启动慢 {#system-slow}

Windows 下打开任务管理器检查有无不必要启动项,加以禁止即可;Linux 下可以使用`journalctl`检查日志,留意启动慢的服务,有针对性地加以解决,或者直接禁用服务
Windows 下打开任务管理器检查有无不必要启动项,加以禁止即可;Linux 下可以使用 `journalctl` 检查日志,留意启动慢的服务,有针对性地加以解决,或者直接禁用服务

### 应用程序慢 {#app-slow}

建议首先检查内存和处理器占用情况,结束其他无关程序;对于有网络 IO 的程序,检查网络连接;对于有磁盘 IO 的程序,检查磁盘健康状态。

### 网络连接故障 {#offline}

建议检查网线是否插好,网关是否登陆,是否欠费,DNS 设置是否正确,上一次关机时代理是否正确关闭等等。对于 Linux 系统,可以检查`rfkill`是否允许相应网卡工作,`ip`是否启动相应适配器。
建议检查网线是否插好,网关是否登陆,是否欠费,DNS 设置是否正确,上一次关机时代理是否正确关闭等等。对于 Linux 系统,可以检查 `rfkill` 是否允许相应网卡工作,`ip` 是否启动相应适配器。

## 小知识串讲 {#knowledge-series}

### 快捷键 {#shortcut}

#### 系统快捷键 {#system-shortcut}

不同系统提供了不同的快捷键,这里简单介绍 Windows 和 Linux 在系统层面提供的快捷键。Windows 徽标键(简称 Win 键)在 Linux 下也称 Meta 键,在 Mac 下则是 Command 键。F1-F12 系列按键有可能需要同时按下 Fn 键使用。
不同系统提供了不同的快捷键,这里简单介绍 Windows 和 Linux 在系统层面提供的快捷键。Windows 徽标键(简称 Win 键)在 Linux 下也称 Meta 键,在 macOS 下则是 Command 键。F1-F12 系列按键有可能需要同时按下 Fn 键使用。

- Windows

Expand All @@ -108,9 +108,9 @@ Windows 下打开任务管理器检查有无不必要启动项,加以禁止即

`Ctrl+Alt+{F1-F12}`: 切换 tty。一般图形桌面位于 tty1 或者 tty2。这一系列快捷键由 Wayland 或者 Xorg 提供

`Alt+SysRq`: 这是一系列快捷键,其中 SysRq 键就是 PrintScreen 键(有的键盘应该会在 PrintScreen 键下面一行写上 SysRq),按下这个组合键后,再按下特定按键,内核会有不同的功能,如按下`C`会让内核强制崩溃;按下`E`会向所有进程发送 SIGTERM 使得它们可以做一些清理后退出;按下`I`会向所有进程发送 SIGKILL 使得它们强行退出;按下`S`会同步磁盘写入;按下`U`会使得所有文件系统被重新挂载为只读;按下`B`会让计算机立刻重启。注意:SysRq 功能可以使用 sysctl 进行配置,默认可能并未开启全部功能。利用这些快捷键可以救回卡死的系统,或者可以在保证文件系统完整的情况下强行重启电脑。
`Alt+SysRq`: 这是一系列快捷键,其中 SysRq 键就是 PrintScreen 键(有的键盘应该会在 PrintScreen 键下面一行写上 SysRq),按下这个组合键后,再按下特定按键,内核会有不同的功能,如按下 `C` 会让内核强制崩溃;按下 `E` 会向所有进程发送 SIGTERM 使得它们可以做一些清理后退出;按下 `I` 会向所有进程发送 SIGKILL 使得它们强行退出;按下 `S` 会同步磁盘写入;按下 `U` 会使得所有文件系统被重新挂载为只读;按下 `B` 会让计算机立刻重启。注意:SysRq 功能可以使用 sysctl 进行配置,默认可能并未开启全部功能。利用这些快捷键可以救回卡死的系统,或者可以在保证文件系统完整的情况下强行重启电脑。

- MacOS
- macOS

TODO!

Expand Down
Loading

0 comments on commit dc527c2

Please sign in to comment.