Skip to content

Commit

Permalink
revert: zhlint style
Browse files Browse the repository at this point in the history
This reverts commit 184edb5.
  • Loading branch information
000lbh committed Oct 30, 2024
1 parent 184edb5 commit 2317937
Show file tree
Hide file tree
Showing 11 changed files with 792 additions and 792 deletions.
6 changes: 3 additions & 3 deletions basic/01-introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

当然,事情总是在逐渐变好的。热心学长们编写了各环境下配置教程,信科也在新生教育阶段开设了计算机基础课,一定程度上弥补了这一缺失。

但我们仍然注意到,这样的 “补丁” 是零散的,有的不够系统全面,有的毫无针对性。同时,即使是有一定基础的同学,也会在学习技术的过程中遇到不同的问题,而这些知识往往在**课程中并不会涉及**
但我们仍然注意到,这样的“补丁”是零散的,有的不够系统全面,有的毫无针对性。同时,即使是有一定基础的同学,也会在学习技术的过程中遇到不同的问题,而这些知识往往在**课程中并不会涉及**

受到 [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) 的启发,我们决定启动 LCPU Getting Started 系列教程的建设,希望能够将这部分内容更加系统地整理好,以便于同学们更好地学习与使用。

Expand All @@ -24,7 +24,7 @@
我们将课程内容分为了入门、中级、进阶三大类。

+ 入门部分面向零基础同学,希望提供一个相对正确的学习路径,同时介绍基本的整个计算机的概念、体系,以及如何更加充分地使用计算机或其他设备。
+ 中级部分面向对计算机已有初步认识,并有兴趣深入了解的同学,较为全面地介绍 Linux、软硬件知识以及部分工具的使用。
+ 中级部分面向对计算机已有初步认识,并有兴趣深入了解的同学,较为全面地介绍 Linux 、软硬件知识以及部分工具的使用。
+ 进阶部分面向有一定技术基础的同学,拓宽同学们的技术视野,同时也为社团培养中坚力量,帮助感兴趣的同学更好地上手与参与社团项目共建。

目前仅有入门篇初步完成了建设。欢迎感兴趣的同学与我们共建 wiki!
Expand All @@ -41,7 +41,7 @@
+ 计算机知识概览,包含对于计算机软硬件及基本体系结构等的简要介绍。
+ 充分利用计算机,包含计算机的环境配置、文件版本控制、网络安全等多方面内容。
+ Linux 基础使用指南,包含虚拟机创建、环境配置以及部分常用操作等内容。
+ 文本编辑与写作工具,包含对于 MarkdownLaTeXTypstBeamer 等 pre 和论文写作时常用工具的介绍。
+ 文本编辑与写作工具,包含对于 Markdown, LaTeX, Typst, Beamer 等 pre 和论文写作时常用工具的介绍。

到此,如果你完整地学完了本部分的 wiki,你应该能对于计算机的基本概念有了一定的了解,从此计算机对你也不再是黑箱。当然,你对于大学期间所需要使用的最基本的技术与工具也应当不再陌生。更重要的是,你应当已经逐渐拥有了通过计算机**独立探索并解决问题**的能力。

Expand Down
78 changes: 39 additions & 39 deletions basic/02-searching-and-question.md

Large diffs are not rendered by default.

186 changes: 93 additions & 93 deletions basic/03-computer-basic-knowledge-1.md

Large diffs are not rendered by default.

64 changes: 32 additions & 32 deletions basic/04-computer-basic-knowledge-2.md

Large diffs are not rendered by default.

426 changes: 213 additions & 213 deletions basic/05-drive-your-computer-1.md

Large diffs are not rendered by default.

104 changes: 52 additions & 52 deletions basic/06-drive-your-computer-2.md

Large diffs are not rendered by default.

80 changes: 40 additions & 40 deletions basic/07-drive-your-computer-3.md

Large diffs are not rendered by default.

102 changes: 51 additions & 51 deletions basic/08-drive-your-computer-4.md

Large diffs are not rendered by default.

52 changes: 26 additions & 26 deletions basic/09-drive-your-computer-5.md

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions basic/10-linux-basic-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

状态:已审阅的发布版,审阅人:000lbh

注:本文的部分材料来自北京大学超算队 “HPC From Scratch “课程第一讲 (Linux 与命令行入门)[https://wiki.lcpu.dev/zh/hpc/from-scratch/01-linux-git-101]
注:本文的部分材料来自北京大学超算队“HPC From Scratch“课程第一讲(Linux 与命令行入门)[https://wiki.lcpu.dev/zh/hpc/from-scratch/01-linux-git-101]

:::

Expand All @@ -15,7 +15,7 @@

对于 Windows 等带图形化界面操作系统,我们所访问的其实是设计者抽象出的交互逻辑。但对于高效的系统,自底向上的彻底理解和掌握是高效使用系统的必备途径。我们得以更深入洞悉文件和文件之间的联系,获得系统更高的主动权。同时,以最小化的人机接口访问能把足够多的资源投入至计算,获得最高的资源利用率。`Linux` 正是带着这样的思想而诞生的。

因此,学习 Linux,我们需要掌握:
因此,学习 Linux ,我们需要掌握:

1. 对这一套思想有充分理解、能顺利玩一些玩具
2. 使用现有的工具操作命令行、把他人准备好的软件运行起来
Expand All @@ -25,19 +25,19 @@

## 关于资源

我们并没有先讲怎么获得一个基于 Linux 的系统,也没有讲这到底是个什么东西。当然,不摸一摸,知道用起来舒不舒服,要了解它、安装它干啥呢?所以我们在这一讲推荐大家直接去 [CLab](https://clab.pku.edu.cn/) 注册一个账号,根据上面的指南在连接到虚拟机。这样,你就可以在不破坏自己的系统的情况下,体验 Linux 的魅力了。等你被 Linux 深深吸引,就可以到我们的下一讲,看看怎么自己安装一个 Linux 系统了。我们这里以 `Debian` 系统为例,大家在 `CLab` 创建云主机的时候,镜像选择 `Debian 12` 即可。
我们并没有先讲怎么获得一个基于 Linux 的系统,也没有讲这到底是个什么东西。当然,不摸一摸,知道用起来舒不舒服,要了解它、安装它干啥呢?所以我们在这一讲推荐大家直接去[CLab](https://clab.pku.edu.cn/)注册一个账号,根据上面的指南在连接到虚拟机。这样,你就可以在不破坏自己的系统的情况下,体验 Linux 的魅力了。等你被 Linux 深深吸引,就可以到我们的下一讲,看看怎么自己安装一个 Linux 系统了。我们这里以`Debian`系统为例,大家在`CLab`创建云主机的时候,镜像选择`Debian 12`即可。

## 先跑个小火车

先来个具体的例子,跑个小火车先。连接到你的 `Linux` 虚拟机,依次输入:
先来个具体的例子,跑个小火车先。连接到你的`Linux`虚拟机,依次输入:

```bash
sudo apt update
sudo apt install -y sl
sl
```

就可以看到一个小火车从你的终端窗口驶过了。这个小火车是一个叫 `sl` 的软件,是一个玩具软件,用来~~矫正把 ls 打成 sl 的坏习惯~~展示 ASCII 艺术的。`apt``Debian` 系操作系统的包管理器,就是帮你管理软件的,`sl` 是一个很小的软件,所以安装的时候很快就安装好了。
就可以看到一个小火车从你的终端窗口驶过了。这个小火车是一个叫`sl`的软件,是一个玩具软件,用来~~矫正把ls打成sl的坏习惯~~展示 ASCII 艺术的。`apt``Debian`系操作系统的包管理器,就是帮你管理软件的,`sl`是一个很小的软件,所以安装的时候很快就安装好了。

大家看哈,一个程序就这么跑起来了,你已经能让 Linux 系统帮你做事情了。我们来具体看看这是怎么发生的。

Expand All @@ -49,7 +49,7 @@ sl

其中,除了子命令,选项和对象都是可选的。我们就以第二个命令为例:

`apt` 是你要运行的程序,`install` 是子命令,`-y` 是选项,`sl` 是对象。很明确了是不是?那么我又怎么知道有哪些程序,这些程序又怎么用呢?
`apt`是你要运行的程序,`install`是子命令,`-y`是选项,`sl`是对象。很明确了是不是?那么我又怎么知道有哪些程序,这些程序又怎么用呢?

第一个问题可以通过搜索学到,描述你要干的事情,搜索引擎会告诉你需要什么软件,相信大家在第二讲已经学过,同时我们也会在第二讲给大家介绍一些常用的命令。

Expand All @@ -58,15 +58,15 @@ sl
- `apt -h`:这是最简单的程序帮助,会列出一些常用的知识
- `man apt`:这是最详细的程序帮助,会列出所有的知识,但是可能会很长
- `tldr apt`:这个命令会给出一些使用示例,可以照着抄
(`tldr` 需要自行安装,相信你可以根据上面安装 `sl` 的方法举一反三)
`tldr`需要自行安装,相信你可以根据上面安装`sl`的方法举一反三

## Linux 101

好,你现在已经知道怎么用 Linux 了,我们来介绍一下 Linux 的一些基本概念。本讲我们不会涉及到很深刻的内容,只是让大家有一个大概的印象。在后续探索中,大家会有更深入的想法。

首先我们来想一想,你刚刚输入的命令是什么?是一个叫做 `sl` 的程序。程序是什么?你的终端怎么知道 `sl` 是什么的?小火车是怎么输出到你面前的?为了成体系地解决这些问题,计算机前辈们发挥了计算机科学中”抽象 “的传家本领:只要能把这些东西抽象归纳为一个概念,就可以方便地管理所有资源。
首先我们来想一想,你刚刚输入的命令是什么?是一个叫做`sl`的程序。程序是什么?你的终端怎么知道`sl`是什么的?小火车是怎么输出到你面前的?为了成体系地解决这些问题,计算机前辈们发挥了计算机科学中”抽象“的传家本领:只要能把这些东西抽象归纳为一个概念,就可以方便地管理所有资源。

所以,“文件” 这一概念被抽象出来,Unix 认为 “一切皆文件”:他们是数据的容器、可读可写,可以被操作。这样,我们就可以用同样的方法来操作文件、程序、设备等等。这时候就有更多问题了:
所以,“文件”这一概念被抽象出来,Unix 认为“一切皆文件”:他们是数据的容器、可读可写,可以被操作。这样,我们就可以用同样的方法来操作文件、程序、设备等等。这时候就有更多问题了:

- 文件怎么组织?
- 文件是谁的,如何反应不同类型的特性?
Expand All @@ -79,44 +79,44 @@ tar 是 Linux 下常用的压缩解压缩工具,试试看怎么创建一个 ta

### 文件如何组织

Windows 下,物理实在先于文件而存在,你可能会看到 C D E 盘等盘符,文件是放在盘符下的。但是 Linux 中,硬盘本身也是文件,所以根目录 `/`,在所有文件之前存在,所有文件都由其派生。其中,文件夹是一种特殊类型的文件,其中可以包含一系列文件和文件夹的索引。
Windows 下,物理实在先于文件而存在,你可能会看到 C D E盘等盘符,文件是放在盘符下的。但是 Linux 中,硬盘本身也是文件,所以根目录`/`,在所有文件之前存在,所有文件都由其派生。其中,文件夹是一种特殊类型的文件,其中可以包含一系列文件和文件夹的索引。

通过 `cd` 命令,你可以在切换当前所在的文件夹;通过 `ls` 命令,你可以查看文件夹下面的内容 (不加参数默认是查看当前文件夹)。路径有一些缩写,你可以认为它们会被自动扩展为从 `/` 出发的路径。`.` 是当前目录,`..` 是当前目录的父目录,`~` 是当前用户的家目录,通常为 `/home/用户名`,或者 `/root/`
通过 `cd` 命令,你可以在切换当前所在的文件夹;通过 `ls` 命令,你可以查看文件夹下面的内容不加参数默认是查看当前文件夹。路径有一些缩写,你可以认为它们会被自动扩展为从`/`出发的路径。`.`是当前目录,`..`是当前目录的父目录,`~`是当前用户的家目录,通常为`/home/用户名`,或者 `/root/`

Linux 上,文件的路径分绝对路径和相对路径两种。绝对路径指的是以 `/` 为开头或者将被扩展为 `/` 开头的,从根目录开始查找到本文件的路径,如 `/home/lcpu/hello.c``~/hello.c``./hello.c` (后两种都将被扩展为 `/home/lcpu/hello.c`)。相对路径指的是相对于当前所在文件夹,文件的存放位置。如果你的当前目录在 /home/lcpu/,那么 hello.c 指的就是绝对路径为 /home/lcpu/hello.c 的文件。
Linux 上,文件的路径分绝对路径和相对路径两种。绝对路径指的是以`/`为开头或者将被扩展为`/`开头的,从根目录开始查找到本文件的路径,如`/home/lcpu/hello.c``~/hello.c``./hello.c`后两种都将被扩展为`/home/lcpu/hello.c`。相对路径指的是相对于当前所在文件夹,文件的存放位置。如果你的当前目录在 /home/lcpu/,那么 hello.c 指的就是绝对路径为 /home/lcpu/hello.c 的文件。

注意,为了安全性考虑,对于可执行文件,如果没有提供绝对路径,终端会在 `PATH` 中查找,而不会在基于相对路径当前文件夹下查找。如果当前文件夹中有 `hello` 需要使用 `./hello` 进行执行。直接执行的话,终端会因为 `PATH` 指定的路径中没有 `hello` 而报错。第四讲中讲过 `PATH` 在 Windows 系统中的含义,Linux 中也大同小异。
注意,为了安全性考虑,对于可执行文件,如果没有提供绝对路径,终端会在`PATH`中查找,而不会在基于相对路径当前文件夹下查找。如果当前文件夹中有`hello`需要使用`./hello`进行执行。直接执行的话,终端会因为`PATH`指定的路径中没有`hello`而报错。第四讲中讲过`PATH`在 Windows 系统中的含义,Linux 中也大同小异。
::: tip 试一试

在自己机器上的 `/` 路径下面逛逛。
在自己机器上的`/`路径下面逛逛。

查找资料并回答:`/proc``/dev` 是什么?哪个文件可以获取 CPU 的核心频率?
查找资料并回答:`/proc``/dev` 是什么?哪个文件可以获取 CPU 的核心频率?

查阅 scp 和 rsync 的 manual,可以了解如何与远程主机之间进行文件传输。

:::

### 文件是谁的,有哪些属性?

对文件的基本操作,有读、写、执行三种。作为多机系统,Linux 中文件如果对每个访问者都相同,那就没有安全性可言了。Linux 的做法是,抽象出了 “用户” 这个实体 (其实就是在 `/etc/passwd` 里面定义的一行 UID 和用户名的对应而已)。为了方便用户的文件共享,同时抽象出了组 (Group) 的概念,代表一组互相信任的用户。
对文件的基本操作,有读、写、执行三种。作为多机系统,Linux 中文件如果对每个访问者都相同,那就没有安全性可言了。Linux 的做法是,抽象出了“用户”这个实体其实就是在 `/etc/passwd` 里面定义的一行 UID 和用户名的对应而已。为了方便用户的文件共享,同时抽象出了组Group的概念,代表一组互相信任的用户。

::: info 补充材料

root 是一个特殊用户,可以自行查阅资料了解。
root是一个特殊用户,可以自行查阅资料了解。

:::

用权限位 4、2、1 (二进制下第 3 2 1 个 bit) 代表读、写、执行的权限,每个文件的读、写、执行,对应当前用户、组内用户以及其他用户组成的 3\*3 矩阵,就是文件的权限。把每一类用户的权限相加可以得到当前权限的简写。
用权限位 4、2、1 二进制下第 3 2 1个 bit代表读、写、执行的权限,每个文件的读、写、执行,对应当前用户、组内用户以及其他用户组成的 3\*3 矩阵,就是文件的权限。把每一类用户的权限相加可以得到当前权限的简写。

例子:750,当前用户$7 = 4 + 2 + 1$,可读可行可执行;同组$5 = 4 + 1$,可读可执行不可写;其他用户$0$,没有任何权限。你可以查看 `chmod` 的帮助,了解如何改变权限。

**所以可执行文件并不是因为这个文件本身有什么特别,而是这个文件被你赋予了可执行的性质。**一个简单的文本文件也可以被加上可执行的权限,也可以发挥操作其他文件的作用,后文的 `Shell` 脚本,以及 `Python` 脚本,都是如此。
**所以可执行文件并不是因为这个文件本身有什么特别,而是这个文件被你赋予了可执行的性质。** 一个简单的文本文件也可以被加上可执行的权限,也可以发挥操作其他文件的作用,后文的`Shell`脚本,以及`Python`脚本,都是如此。

::: tip 试一试

如果你会写 Python 的话,写一个从输入读取 4 个数字,输出他们和的程序,输出结果到控制台。
如果你会写 Python 的话,写一个从输入读取4个数字,输出他们和的程序,输出结果到控制台。

在本地跑起来这个程序之后,把 `#!/usr/bin/env python3` 放在脚本的第一行 (这个特殊的一行叫 Shebang)。给这个脚本加上可执行的属性,然后直接运行这个文本!还记得应该如何运行一个不在 PATH 中的命令吗
在本地跑起来这个程序之后,把`#!/usr/bin/env python3`放在脚本的第一行这个特殊的一行叫 Shebang。给这个脚本加上可执行的属性,然后直接运行这个文本!还记得应该如何运行一个不在PATH中的命令吗

:::

Expand Down
Loading

0 comments on commit 2317937

Please sign in to comment.