跳转至

分享会

Intro

大家好,这是第六次分享会补录,填一下之前留下的坑, slide 的链接在放在简介里。

那么做这个分享会的初衷就是来传教一下 Linux qaq。 因为我看身边同学使用Linux 做主力系统的不是很多。然后不少同学其实对 Linux 操作系统有不少偏见,比如使用 Linux 就一定是在 黑框框里敲命令。其实 Linux 是一直有图形化界面的,最早是 Xwindow, 发展到现在的 wayland, hyperland, 只不过是现在服务器使用Linux操作系统比较多。

如果你想要折腾, 在 Linux 下可以做到不输 MacOS 的交互体验,如果你不想折腾,那么想 Gnome, kde 这类桌面环境也能做到开箱即用。

正题

操作系统介绍

好了,进入我们今天的正题部分。我们今天主要介绍主流操作系统,为什么要使用 Linux,Linux 下开发环境大概是怎样的。再详细介绍两个常用的 Linux 下的应用程序 Vim, Make, 最后推荐一些好用的现代化命令行工具。

目前主流的操作系统就三种,大家最熟悉的 Windows, 然后 MacOS, 最后是 Linux。值得一提的是,MacOS 本身就是基于 BSD Linux 二次创作的。所以 MacOS 其实也算半个 Linux。

市场份额 maybe**

为什么不推荐用 windows。

首先是臃肿,你知道 家庭版和旗舰版 windows 有什么区别吗?专业版和旗舰版呢?我也不知道 -=-。然后提到 windows 就不得不提到一个叫作注册表的东西,这个组件 windows 从 3.1 用到现在 windows11, 30多年了,核心逻辑还是没变。你说能不臃肿吗?

Windows 适合使用,但不适合开发。举个例子,在windows 配置环境变量,首先需要打开控制面板,高级设计,编辑环境变量,然后还要区分一下系统环境变量和PATH。Linux 下配置环境变量只需要在 .bashrc / .zshrc 下 添加 export VAR=VALUE 即可。

而且在 Windows 添加了那么多次环境变量,你恐怕也不知道环境变量到底是干嘛的。

稳定性不用说,大家或多或少都遇到过 windows 的 蓝屏现象,而且解决办法一般也只有一个,重启。

安全性问题,其实我也不是很了解,大家自己课后看看吧。

为什么用Linux

  • Linux 是自由软件,源代码公开。
  • 轻量级,对硬件要求不高,Alpine Linux 的镜像文件只有 5MB
  • 稳定,兼容性强。这里的 Arduino Uno 芯片主频只有 700HZ,这是什么概念呢?我给大家展示一下我目前这台笔记本的主频
  • 最重要的,开发体验好。这个我之后在工作流里会提到

Linux 严格意义上来讲是一个操作系统内核,还需要加上一些系统软件才能算是一个完整的操作系统。

这也就是 Linux 有众多发行版的原因,你可以把 Linux kernel 理解为汽车的发动机,不同的发行版就是不同牌子的汽车。

这么多发行版怎么选呢? 我推荐新手用 Ubuntu,之后熟悉了之后可以换成 Arch Linux manjaro Linux NixOS

最后我想说的是,Linux 和 windows macos 一样,他就是一个操作系统,你可以在上面学习、看视频、打游戏。大家学 Linux 的时候不要有太大的心理包袱,就把 Linux 当成一个大号玩具,这个玩具的说明书就是命令行的 mannul, 或者是网上的教程也好,相信 Linux 能带给你快乐的。

Linux 下工作环境介绍

大家对GUI应该很熟悉了, Windows 的话,都在和 GUI 打交道。 命令行工具大家应该不陌生,就是 cd 之类的。那么如果我既不想用鼠标点来点去,也不像在命令行一个个的敲,哪有什么工具可以用吗?其实是有的,我们叫他 TUI

我在 Linux 下写写代码,主要使用的就是四个工具 首先来介绍 ranger (演示一下预览效果) 其次是 tmux (演示分屏、挂起操作) 然后是 vim (演示一下 文件树,代码结构,智能补全等) 最后是 LazyGit (演示一下 git add, commit push 就好)

Vim 专题

接下来,我重点介绍 Vim

首先,我们先来了解一下什么是 Vim。Vim 是一个文本编辑器,他的前身是 vi,vi的前生是ex (可以演示一下 oeasy vim tutorial 里 ex 的图片) 再来介绍一下使用 vim 的方式。如果你现在没有 Linux 系统环境的话,可以打开 Vscode 的插件商场下载一个 vim 插件。这个插件模拟了大部分 vim 的功能,初学是足够了。

我们为什么使用 vim

最重要的是因为 vim 可以很大程度的提高你的编辑效率。举个例子,假设你想生成一个测试文件,这个文件包含了 1-100个数,每个数各占一行,你会怎么做。写一段 c 程序,还是写一个 Python 脚本?在 Vim里要达到这个效果,只需要几个键。我再演示一个例子,我现在有一个存放图片的文件夹,我现在想写一个网页,来陈列文件夹下的所有图片,我们看用 vim 是怎么做的。

vim 可以提升你写代码时的专注程度,因为在编辑时,你双手不需要离开键盘,不会被鼠标打断。vim 还有良好的插件生态,基本上你想要添加的功能,别人都已经写好了插件,你直接安装就好了,我的vim就装了不少插件。

即便你不想使用 vim 作为你的主力编辑器,你也应该学习 vim 的键位逻辑,因为终端下不少工具的快捷键都是 vim 风格的,比如 more,man ...

如果你使用 ide 的话,那么大概率这个 ide 也是有 vim 插件的,所以 vim 和 ide 实际上也并不是冲突的。

好,我们现在开始正式介绍 vim

这有一个段子,就是说如何生成一段随机序列,那就是让新手退出vim。你们可以打开一个vim试试。

vim 

你会发现没有键位提示,按 esc 键没反应,按 ctrl-c 键也没反应,怎么回事呢?好了, 现在我告诉你怎么退出 vim,今天这节课你其他的都可以不会,但至少你得知道如何退出 vim。将输入法调制英文, 输入 :q 或者 :x 都可以退出

要高效的使用 vim,就不得不提到 vim 的几种操作模式。我们挨个来介绍。进入 vim 之后,默认是普通模式,按下 a / i 键可以进入插入模式,在插入模式下,vim于其他编辑器无差异。按下 esc 键,vim 退回普通模式。输入 :wq ,保存并退出。

为什么,vim 要分插入模式和普通模式呢,直接进入 vim 就能编辑不好吗。你说得对,所以有 nano。vim 假定你不仅在 vim 里写代码,你还会花大量时间修改、阅读代码。这个时候,一般处于普通模式,而键盘的所有按键几乎都可以作为操纵文本的快捷键。

我们首先介绍移动、然后是编辑。

  • 移动:

h j k l 对应上 下 左 右, 你也可以使用方向键,但是不推荐。 w for word, 向前移动一个单词,b for back, 向后退一个单词。 e for end, 移动到当前单词的末尾。 ( 可以向前移动一句话, )向后移动一句。 { 可以向前移动一段,} 可以向后移动一段 (使用空行来判断)。

  • 编辑

先粗略介绍一下 y for yank, 复制 (yy 复制整行);p for paste, 粘贴 (pp到下一行) d for delete (dd 删除整行)。可以看出重复两次都是对整行进行操作。

i for insert, 向前插入,a for append 向后插入。 o 在下一行插入, O在上一行插入(一般小写字母都是在光标下方编辑,大写字母是在光标上方编辑)

再介绍可视模式

在普通模式下,按下 v 进入 可视 模式,这个时候可以使用移动键位来选择文本,hjklwb 等等。选中后 按 y/p/d 复制/替换/删除

按下 V 进入 行可视模式,这时候是一行一行的选择 c-v 进入 快可视模式,这时候是一个矩形一个矩形的选择

组合技

在普通模式下,可以通过 数字 + 命令 来重复执行指定命令

  • 比如 7w 等价于按7次w
  • 7dw 删除光标后7个单词

还可以通过指定文本对象来进行修改

  • 比如 di(,删除括号内的所有内容
  • da(, 删除括号内的所有内容,包括 括号本身

vim 的进阶学习

这里根据剩余时间选择性的介绍吧。我感觉至少要讲一下 vim 配置文件。

vim 在启动的时候,会默认读取 ~/.vimrc 这个配置文件中的信息,那么我们在配置文件中,可以做写什么呢?

  • 配置快捷键
  • 配置插件
  • 调整 vim 编辑器的一些默认属性

tab 和 buffer 是什么

介绍一下如何在vim中分屏,开多窗口

介绍 Make

为什么要介绍 Make ?一言以蔽之:自动化。 make 会读取 Makefile 这个文件来构建项目,庞大如 Linux 这个操作系统也可以使用简简单单一个 make 来进行构建,可以把它理解为 ide 中 运行的那个表示 运行的 三角形按钮

你可能会说,有了 ide, 我还学什么 make 正是因为 ide 屏蔽了这些细节,作为计算机专业的我们 也应该理解 运行背后的逻辑。 况且,有时候你并不一定能使用 ide 来运行项目

我们通过一个简单的 Makefile 文件来介绍 make。 我们都知道(也许吧) 运行 py 文件,可以在终端输入 python filename。那么运行 c 语言能不能也这么方便?我们用 make 试一下

(开始运行代码)

介绍最简 Makefile 的含义。首先冒号前的是构建目标,冒号后的是依赖文件。再下面的是构建目标说使用的命令。

当我们在终端输入 make 后, make 会构建第一个目标文件(也就是我们这里的 default), default 依赖的文件是 $(TARGET), 当前文件夹下找不到 $(TARGET), 所以 make 接着找 $(TARGET)的构建规则, $(TARGET) 的依赖文件是 foo.o 而现在当前文件夹下没有 foo.o 这个文件, 那么接着找 foo.o 的构建规则,foo.o 的依赖文件是 foo.c, 欸找到了。那么开始执行 gcc -c foo.c foo.c, 有了 foo.o 后,就开始执行 gcc foo.o -o foo, @./foo

@ 表示执行但是不再终端打印这个命令

隐式规则

之前我们说而现在当前文件夹下没有 foo.o 这个文件, 那么make会找找 foo.o 的构建规则,其实不写这个也行,make 会隐式推导出 .o 文件的构建方法。

可以再讲一下多文件构建,体现 make 的灵活性

终端下使用工具推荐: 这个演示一下就好了。

学习方法

learn by practice, bing(google)/gpt/manual is all you need

一定要锻炼自己的信息检索能力,一定要锻炼自己看文档的能力, 一定要锻炼自己看英文文档的能力

好了,最后展示一下我slide 的部分来源,和一些推荐的网站 今天分享会到此介绍,再次谢谢大家能抽空前来参加。

ysyx 介绍

那么先介绍到这里,接下来简单介绍一下 ysyx 这个项目,它融合了南京大学的PA, 侧重于让你从 0 开始 搭建一个属于自己的处理器,然后再这个处理器上写一个操作系统,再在这个操作系通的基础上写应用程序。最终达到的效果是能运行 2000 年左右发行的仙剑奇侠传游戏。

整个项目主要分为三个阶段 Preveiw 预学习, 预学习阶段主要是学习一写前置知识,那么其中安排学习 Linux,还有对 C 语言的基础的检查。大一的同学可以借此检测一下自己水平。 那么如果是大二的同学,预学习阶段刚好也有安排数电的课程,大概是在 FPGA 模拟器上做一些有趣的仿真电路。

  • preview 预学习
  • Base 基础
  • Advaneced 高级
  • * Super

颜色主题调整

评论区~