Skip to content

初识 Linux

摘要

本篇对应实验文档中从“Installing GNU/Linux”到“Installing Tools”,以及“More Exploration”的部分。

本手册并不能代替原实验手册!

本手册是笔者对原实验手册的补充和拓展,而且限于笔者水平有限,其质量也无法保证,并不能代替原实验手册,只能作为参考。


安装 Linux 系统

PA 部分需要在 Linux 环境下运行,所以你要做的第一步,就是安装 Linux 系统。

本人的建议是使用虚拟机安装 Linux 系统,其好处大概有三点。

  1. 你在安装虚拟机的过程中不会担心影响已有的系统,你的担忧会更少。
  2. 如果后续的其他课程(如操作系统)如果需要安装其他的操作系统进行实验的话,你可以很快地扩展出另一个虚拟机来。
  3. 如果你是一个游戏用户,选择装 Linux 真机并删除原系统的话, Linux 系统下一些软件的不兼容可能也会影响你的游戏体验。

具体安装方面,网上有很多视频教程,搜索学习即可。

安装 Linux 系统成功

在成功得到一个 Linux 系统,且完成了实验文档的 “Installing GNU/Linux” 部分后,就可以继续进行下面的部分了。

初识命令行工具

在刚获得你的第一个 Linux 系统时,你会发现这跟 Windows 系统也没什么区别,也是有一个桌面,文件夹也是双击一下打开,也是由一个文件管理器显示文件夹中的内容,右键一下也可以唤出一个工具栏,进行复制粘贴之类的操作,你还可以新建文件夹,总之一切都是熟悉的感觉。

大部分同学对 Linux 的第一个陌生感觉,可能是在一段时间的探索后,发现了下面的问题:

Question

怎么新建文件?

现在,我们就要请出终端来了。你可以右键在当前目录打开终端,输入:

touch hello.txt

然后,你会发现当前目录下多了一个名为 hello.txt 的文件。

好吧,看来 Linux 还确实没有那么简单。

Linux 命令行的操作原理其实是这样,以上文的 touch hello.txt 为例,其中的 touch 是一个可执行文件的名称,这个名称会根据环境变量链接到一个在文件系统中实际存在的可执行文件(如 /bin/touch),然后我们又给这个可执行文件提供了 hello.txt 这个参数,于是可执行文件会在当前目录(即你的 bash 终端所在的目录,而非 touch 这个可执行文件所在的目录)下创建一个名为 hello.txt 的文件。

上面这段话你暂时不需要全部理解透彻,你只需要知道,对于命令行,第一个参数是一个可执行文件,后面跟着的参数都是要传递给这个可执行文件作为输入的参数(即在 C 语言中 main 函数参数的 argv )。如果你对上面的话中的哪些部分还是比较好奇,可以尝试询问 AI 。

接下来,试着学习几个简单的 Linux 命令吧,你可以让 AI 告诉你它们的用法,并帮你生成几个简单的情境示例帮助你练习,文档里就不过多介绍了。

  • ls
  • cd
  • mkdir
  • rm
  • cp
  • mv
  • cat
  • pwd
  • echo
  • find

学习命令行工具最快的办法可能还是多使用,当你面对某种需求时,你可能就会想到,似乎可以通过某些命令行工具来解决,逐渐使用得多了,就容易记住了。从笔者个人的学习经验来说,单纯去记背命令行工具的用法,会比较容易遗忘,这也是为什么我建议你使用 AI 帮你生成一些具体的情境示例,这样的话才能让你大概知道在什么样的环境下哪些命令行工具能派上用场。

命令行中的管道与重定向

你应该已经大概掌握了简单的命令行操作了,接下来你需要了解命令行中的管道重定向

所谓管道,就是一个能够把一个程序的输出作为另一个程序的输入的工具,用 | 表示。下面是一个例子:

假设你有一个存放了大量文件的文件夹,你想在这个文件夹(不包括文件夹内部的其他文件夹)中找到一个文件/文件夹,但你记不太清楚它的名称了,只依稀记得这个文件和“hello”有关。那你就可以使用下面的命令:

ls | grep hello

这个命令会先把当前文件夹下所有的文件/文件夹名列出,然后再通过 管道把这些名字输送给 grep 工具,这个工具根据后面跟着的 hello ,知道要从其中找出所有名称中含有 hello 的文件/文件夹。

我们还能够将命令的输出重定向到一个文件中,这样就可以把命令的结果保存到文件中,而不是在终端中显示。

ls > file.txt

这个命令会把当前文件夹下所有的文件/文件夹名都列出来,然后输出到 file.txt 文件中(而不是输出到终端中)。

以上内容不需要全部记住,你需要记住的是:假如下次你遇到一个十分复杂的命令行指令,你要明白这一长串指令,是可以通过 |> 之类的符号分割开来,然后分别理解各个小块的。这样在以后遇到复杂的命令行指令时,就不会觉得无从下手。

初识 Linux 系统

Linux 系统中存在终端,我们可以在终端中输入命令,从而对系统进行想要的操作。各个命令之间还可以通过管道之类的机制相互协作。

命令行中的管道与重定向

你已经初步了解了命令行中的管道与重定向,可以尝试再了解几个简单的命令行工具。