Linux是一个操作系统平台。我们常用的操作系统叫Windows。当然很多朋友用的是苹果电脑,苹果电脑用的系统叫macOS。也许你听说过一个叫Unix的系统,比Linux还要老,多用于服务器领域。Linux也用于服务器领域。BAT(百度、阿里、腾讯)、Google、脸书等知名一线互联网公司的服务器99%的操作系统都是Linux。大家的安卓手机也是Linux操作系统。

Linux的起源

说到Linux的历史,故事很多,但总觉得你记不太清了,甚至有放弃学习Linux的想法。所以这里只是简单介绍一下Linux的起源。

在Linux诞生之前,它是由Unix主导的。然而,当时Unix并不是免费的。如果你想用,你必须先买一个许可证,这在当时是非常昂贵的,很少有人买得起。

在这种背景下,很多电脑爱好者都渴望有一个便宜或者免费的操作系统供大家学习和研究。1983年,伟大的计算机科学家理查德·斯托尔曼启动了一个项目,旨在构建一个完全免费的操作系统,这就是著名的GNU项目。所谓完全自由,就是所有加入GNU计划的软件都必须自由使用、自由修改、自由发布。换句话说,软件发布必须发布其源代码,源代码可以被他人自由使用,也可以随意更改,但更改后的代码必须发布。当然,如果你只是说不可以,那肯定有明确的许可协议来限制你如何自由使用。这套规定可能就是著名的GPL协议。

GNU项目推出后,支持者众多,所以这期间产生了很多优秀的软件,如vi、Emacs、GCC等。不幸的是,一直没有一个完美的操作系统。直到1991年,芬兰大学生林纳斯·本尼迪克特·托瓦尔兹根据自己的兴趣开发了一种类似Unix的操作系统。一经发布就受到了众多发烧友的追捧。这个系统是Linux。1994年,Linux加入GNU计划,通过GPL协议发布。从此,GNU/Linux真正实现了打造完全免费的操作系统的想法。

Linux系统

如果你之前没有接触过Linux,可能不太清楚为什么会有这么多不同的Linux发行版。在看Linux包的时候,你一定会被像发行版、LiveCD和GNU这样的术语搞糊涂。第一次进入Linux世界,会让人感觉不那么舒服。在开始学习命令和脚本之前,我们将为您揭开Linux系统的神秘面纱。

Linux可以分为以下四个部分:

Linux内核

GNU工具

图形桌面环境

应用软件

在Linux系统中,每个部分都有自己的功能。但就单个部分而言,作用并不大。图1是一个基本的结构框图,显示了所有部分是如何协作形成整个Linux系统的。我们将在下面详细介绍这四个部分,然后概述它们如何通过协作形成一个完整的Linux系统。

图1 Linux系统

探索Linux内核

Linux系统的核心是内核。内核控制计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。

Linus在赫尔辛基大学上学时开发了第一个Linux内核。一开始他只是想模仿一个Unix系统,因为Unix操作系统在当时很多大学都很流行。

Linus完成开发后,向互联网社区发布了Linux内核,并征求改进建议。这个简单的动作引发了计算机操作系统领域的一场革命。很快,Linus收到了来自世界各地的学生和专业程序员的各种建议。

如果任何人都可以修改内核程序代码,这将导致完全的混乱。为了简单起见,Linus充当所有改进建议的看门人。建议的代码能否并入内核完全取决于Linus。时至今日,这个概念仍然被用于Linux内核代码的开发。不同的是,现在它是由一组开发人员完成的,而不是由Linus一个人完成的。

内核主要负责以下四个功能:

系统内存管理

软件程序管理

硬件管理

文件系统管理

让我们进一步探讨上述每个功能。

1.系统内存管理

操作系统内核的主要功能之一是内存管理。内核不仅管理服务器上的可用物理内存,还创建和管理虚拟内存(即实际不存在的内存)。

虚拟内存是通过内核硬盘上的storage 空 room来实现的,称为swap 空 room。内核不断地在exchange 空和实际物理内存之间交换虚拟内存的内容。这使得系统认为它拥有比物理内存更多的可用内存(如图2所示)。

图2 Linux系统内存映射

存储单元按组划分成许多块,这些块称为页。内核的每个内存页都放在物理内存或swap 空之间。然后,内核将维护一个内存页表,指示哪些页在物理内存中,哪些页被交换到磁盘。

内核会记录哪些内存页在使用,并自动将一段时间没有访问过的内存页复制到swap 空区域(称为swap out,swapping out)——即使还有可用内存。当一个程序想要访问一个已经换出的内存页面时,内核必须从物理内存换出另一个内存页面来给它空间空,然后从交换空间空换入所请求的内存页面。显然,这个过程需要时间,减缓了运行过程。只要Linux系统还在运行,为运行程序交换内存页面的过程就不会停止。

2.软件程序管理

Linux操作系统将运行的程序称为进程。该流程可以在前台运行并在屏幕上显示输出,也可以在后台运行并隐藏在幕后。内核控制Linux系统如何管理系统上运行的所有进程。

内核创建第一个进程(称为init进程)来启动系统上的所有其他进程。当内核启动时,它将init进程加载到虚拟内存中。当内核启动任何其他进程时,它会在虚拟内存中为新进程分配一个特殊的区域来存储该进程使用的数据和代码。

一些Linux发行版使用一个表来管理系统启动时自动启动的进程。在Linux系统上,这个表通常位于特殊文件/etc/inittab中。

其他系统(比如流行的Ubuntu Linux发行版)使用/etc/init.d目录,其中放置了用于在启动时启动或停止应用程序的脚本。这些脚本通过目录/etc/rcX.d中的条目)*启动,其中x代表运行级别。

*这些条目实际上是/etc/init.d目录中启动脚本的符号链接。

Linux操作系统的init系统采用运行级。运行级别决定了init进程运行/etc/inittab文件或/etc/rcX.d目录中定义的某些特定类型的进程。Linux操作系统有五个启动和运行级别。

当运行级别为1时,仅启动基本系统进程和一个控制台终端进程。我们称之为单用户模式。单用户模式通常用于系统出现问题时的紧急文件系统维护。显然,在这种模式下,只有一个人(通常是系统管理员)可以登录系统操作数据。

的标准启动级别是3。在此运行级别,大多数应用软件(如网络支持程序)都将启动。Linux中另一个常见的运行级别是5。在这个运行级别上,系统将启动图形化的X Window系统,允许用户通过图形化的桌面窗口登录系统。

Linux系统可以通过调整启动级别来控制整个系统的功能。通过将运行级别从3调整到5,系统可以从基于控制台的系统变成更高级的图形化X Window系统。

3.硬件设备管理

内核的另一个职责是管理硬件设备。Linux系统需要与Gavin Encyclopedia通信的任何设备都需要将其驱动程序代码添加到内核代码中。驱动代码相当于应用程序和硬件设备之间的中间人,允许内核与设备交换数据。在Linux内核中插入设备驱动代码有两种方法:

将设备驱动代码编译到内核中

可插入内核的设备驱动模块

以前,插入设备驱动程序代码的唯一方法是重新编译内核。每次向系统中添加新设备时,都必须重新编译内核代码。随着Linux内核支持的硬件设备越来越多,这个过程变得越来越低效。幸运的是,Linux开发人员已经设计了一种更好的方法来将驱动程序代码插入到正在运行的内核中。

开发者提出了内核模块的概念。它允许将驱动程序代码插入到正在运行的内核中,而无需重新编译内核。同时,当设备不再使用时,内核模块可以从内核中移除。这种方法极大地简化和扩展了Linux上硬件设备的使用。

Linux系统把硬件设备当作特殊文件,称为设备文件。加文社会百科有三类装备:

字符设备文件

块文件

网络文件

类型-设备文件是指在处理数据时一次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。块文件是指处理数据时每次都能处理大块数据的设备,比如硬盘。

网络文件是指使用数据包发送和接收数据的设备,包括各种网卡和特殊的环回设备。这个回送设备允许Linux系统使用通用的网络编程协议与自己通信。

Linux为系统上的每个设备创建了一个称为节点的特殊文件。与设备的所有通信都通过设备节点完成。每个节点都有一个惟一的数字对,供Linux内核识别。值对包括主要设备号和次要设备号。相似的设备归类在相同的主设备编号下。次设备号用于标识主设备组下的特定设备。

4.文件系统管理

与其他一些操作系统不同,Linux内核支持通过不同类型的文件系统从硬盘中读写数据。除了它自己的许多文件系统之外,Linux还支持从其他操作系统(如Microsoft Windows)采用的文件系统中读取和写入数据。内核必须在编译时增加对所有可能的文件系统的支持。表1列出了Linux系统用来读写数据的标准文件系统。

表1 Linux文件系统

Linux服务器访问的所有硬盘都必须格式化为表1中列出的文件系统类型之一。

Linux内核使用虚拟文件系统(VFS)作为与各个文件系统交互的接口。这为Linux内核与任何类型的文件系统通信提供了一个标准接口。当装载和使用每个文件系统时,VFS会在内存中缓存信息。

GNU工具

除了内核控制硬件设备之外,操作系统还需要工具来执行一些标准功能,比如控制文件和程序。Linus在创建Linux内核时没有任何可用的系统工具。不过,他幸运的是,在开发Linux内核的同时,一群人正在互联网上合作模仿Unix操作系统开发一系列标准的计算机系统工具。

GNU组织(GNU是GNU\’s Not Unix的缩写)开发了一套完整的Unix工具,但是没有内核系统可以运行它们。这些工具是在开放源代码软件(OSS)的概念下开发的。

开源软件的概念允许程序员开发软件并免费分发。任何人都可以使用、修改软件或将软件集成到自己的系统中,而无需支付任何许可费。通过将Linus的Linux内核与GNU操作系统工具相结合,就产生了一个功能丰富的完整的自由操作系统。

虽然Linux内核和GNU工具的组合通常被称为Linux,但是你也会在网上看到一些Linux纯粹主义者称之为GNU/Linux系统,以此来致敬GNU组织所做出的贡献。

1.核心GNU工具

GNU项目的目的是为Unix系统管理员设计一个类似Unix的环境。这个目标促使项目移植了许多常见的Unix系统命令行工具。这套用于Linux系统的核心工具被称为coreutils(核心实用程序)软件包。

GNU coreutils软件包由三部分组成:

处理文档的工具

操纵文本的工具

管理流程的工具

这三组主要工具中的每一组都包含一些对Linux系统管理员和程序员来说必不可少的工具。

2.壳

GNU/Linux shell是一种特殊的交互工具。它为用户提供了一种启动程序、管理文件系统中的文件和运行在Linux系统上的进程的方法。shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许您输入文本命令,然后在内核中解释并执行它们。

Shell包含一组内部命令,可以用来完成复制文件、移动文件、重命名文件、显示和终止系统中运行的程序等操作。Shell还允许您在命令行提示符下输入程序名,它会将程序名传递给内核来启动它。

您还可以将多个shell命令放入文件中,并作为程序执行它们。这些文件被称为shell脚本。您在命令行上执行的任何命令都可以放入shell脚本中,并作为一组命令来执行。这有助于创建需要多个命令协同工作的工具。

在Linux系统上,通常有几个可用的Linux shell。不同的shell有不同的特性,有些更有利于创建脚本,有些更有利于管理进程。所有Linux发行版的默认shell都是bash shell。Bash shell由GNU project开发,作为标准Unix shell——Bourne shell(以其创建者命名)的替代品。bash shell的名字是一个对抗Bourne shell拼写的文字游戏,叫做Bourne again shell。

发表评论

后才能评论