上一篇,我们初步提到了 GNU/Linux ,从这一章开始,我们将开始讲解什么是GNU/Linux,以及如何安装并使用它,在安装并使用 GNU/Linux 之前,先让我们了解一下GNU/Linux到底是什么。

首先,先了解一下 GNU 和 Linux 分别是什么。

简单说来,GNU 是理查德·斯托曼等自由软件运动的发起者于20世纪八十年代开始研制的自由的操作系统。Linux 是林纳斯·托瓦兹(Linus Torvalds)于二十世纪九十年代与许多程序员共同开发的操作系统内核。

以上叙述可以看出,GNU 与 Linux 是两个工程,那么它们又是如何结合到一起去的呢?九十年代时,GNU 操作系统的基本架构已经开发完毕,仅仅差一个内核,而 GNU 的开发者们开发的内核——hurd 由于其开发难度超出了设想导致不能实际使用,但这个时候林纳斯·托瓦兹等程序员开发了 Linux 内核并在开发完毕后的第二年使它成为了自由软件,于是 GNU 结合 Linux 内核成为了 GNU 的一个发行版本即 GNU/Linux。①

GNU 操作系统与 Linux 内核的结合是自由软件运动历史上的大事。它表明自由软件运动有了自己独立的操作系统,从而可以将大量自由软件整合起来并且能更大地发挥它们的作用,进而大大促进自由软件运动的发展。

以上便是 GNU/Linux 的历史。

顺便说一句,有很多人将 GNU/Linux 仅仅称作 Linux,这背后体现的其实是资本家对于自由软件思想的抵触,他们无法接受自由软件思想,他们妄图通过抹杀 GNU 让用户忘记 GNU/Linux 是自由软件运动的产物。②

GNU/Linux 的历史想必大家已经有所了解了那么我们接下来讲讲,GNU/Linux 的基本概念。

一切皆是文件。一切皆是文件,这是什么意思,相信每一个看到这句话的读者一定有些不明所以,不过,其实它很好理解,简单来说,在 *nix(或称“类unix”)操作系统中,不但程序配置用人类可读的文本储存于典型文件中,就连磁盘分区、通信接口,甚至网络套接字都“表现为文件”,以类似典型文件的方式去访问。用文本文件保存程序配置的好处是便于管理与控制计算机,因为进行配置就是在编辑文件。而后者的实质是用读写文件的操作统一抽象任意输入输出操作,这种统一可以大大拓展应用程序的适用范围。但同时用户如果缺乏运用 *nix 系统的知识或者因为失误进行了误操作,将会危害计算机,因此 GNU/Linux 系统下存在严格的权限隔离机制。

权限隔离。GNU/Linux 系统的权限隔离体现为不同账户对同一(广义)文件的访问权限的区别。*nix 系统中任何权限主体(用户和组)对任何文件系统对象均有读、写、执行三种访问权限。*nix 系统中普遍存在 root 账户,又称超级用户,它有权更改文件系统中的任何文件和目录的访问权限,故可以通过修改操作系统上的文件进而控制住计算机;而非 root 的普通账户就是通常情况下用来登录操作系统、进行日常操作的账户,其权限只是 root 账户权限的子集,只能更改属于自己的文件和目录的权限。每个普通用户被(root 用户)创建时都会分配一个/home/<用户名>(被称为该用户的“主目录”或“家目录”)归其所有。因此使用它仅可以自由支配自己的主目录下的文件,甚至不可以下载安装软件包(因为普通用户没有主目录以外范围的写权限,但自行编译软件并安装到主目录之内来运行是可以的)。通过这种分明的权限隔离,普通用户就无法对自己的主目录以外的文件进行编辑修改(有的甚至还不能读取),这样可以保证多用户并存的时候,不会因为乱动别人的文件而互相干扰,这体现了其多用户操作系统的特点。

GNU/Linux 的软件依赖关系。GNU/Linux 下的软件能合理处理软件依赖关系。什么叫软件依赖关系呢?一个软件往往能运行需要其对应的运行环境,比如a软件要运行,它可能需要b软件作为其运行环境,这时如果c软件要运行也需要b软件,那么就可以说a和c都依赖b,b与a和c形成依赖关系。这在 Windows 下处理得并不好,比方说,还是a软件依赖b软件,c软件也可以依赖b软件,但是c软件的软件包里又包含了b,这样就会浪费空间,原因就是 Windows 没有统一的包管理器;但在 GNU/Linux 下由于存在统一的包管理器,软件依赖关系处理良好,往往b就是b,不会多出个和b功能重复的软件,这样可以减少相同功能程序的存在,节约磁盘空间。

目录树。GNU/Linux 对于文件系统的划分方法不同于 Windows 下那种C、D、E盘的模糊分法,它是通过目录树组建起文件系统的。首先一切目录都挂载在 /(根目录)下,而根目录下的每个目录都有它的作用。例如,/home 存储各个用户的家目录,个人帐户的文件都存储在这里,这也是未取得 root 密码的用户所唯一能修改的文件的存储地; /etc ,用于存储程序所需的全局配置文件,如 sudo 的配置文件 sudoers 就存储在这里。而子目录下又会包含二级子目录,如 /home 用户家目录下包含的具体的用户目录。这样就构成了目录树。③

命令行。GNU/Linux下许多软件都需要通过命令行界面的形式使用,GNU/Linux 的命令行强大无比,可以进行网络通信可以压缩可以写文章可以编程,总之基本涵盖了计算机使用的方方面面。在命令行界面里,我们通过输入字符命令来进行操作,这虽然一开始会比较难,但是随着熟练程度的加深,你会渐渐发现很多时候命令行的效率要高于图形界面。④

以上就是在安装前,关于 GNU/Linux 的基础知识,那么使用 GNU/Linux,除了它是自由软件安全性较高以外,还有什么好处呢?

笔者根据以上特点总结了以下三点:

  1. GNU/Linux 下一切皆是文件,这和 Windows 这种充斥着注册表和设备专用工具的系统不同,可以更加方便地管理系统和电脑。

  2. GNU/Linux 下用目录树安排磁盘,可以更有效率地利用资源,做到井井有条。

  3. GNU/Linux 下命令行界面强大无比,可以节约很多图形化所需的时间并实现自动化,提高效率。

注释:

①GNUlibc 至少可以对接三种内核、hurd、linux、还有 freebsd 的内核,从而分别构成 GNU/Hurd、GNU/Linux 和 GNU/kFreeBSD,其中 GNU/Hurd 前面提过因为技术不成熟,GNU/kFreeBSD 因为支持的硬件少且用户体验和 GNU/Linux 相差不大,因而使用的人数非常少。

②这也和“开源”运动有一定关系,至于开源软件和自由软件的区别以后会提到。

③目录树的知识具体会在接下来几章详细讲解。

④Windows 也有它的命令行终端 cmd,但是因为设计不科学,且 Windows 下的命令行工具不成体系(比如缺乏命令行下的 http 下载工具),因此很不好用。