Linux是一个操作系统平台。我们平时常用的操作系统叫作Windows。当然,也有不少朋友使用苹果电脑,苹果电脑所用的系统叫作macOS。也许你还听说过一种系统叫作Unix,Unix是比Linux更加古老的一种系统,多用在服务器领域。 Linux同样也是用在服务器领域,大家熟知的BAT公司(百度、阿里、腾讯)、Google、Facebook等一线互联网大公司的服务器99%的操作系统都是Linux。大家用的Android手机也是Linux操作系统。
说到Linux的历史,故事就多了,但总觉得讲太多你也记不住,甚至会产生放弃学习Linux的念头,所以这里只简要介绍一下Linux的由来。
在Linux诞生之前,一直是Unix的天下。只不过当时Unix并不能免费获得,要想使用必须先购买授权,这在当时是非常昂贵的,很少有人能承担得起。
在这样的背景下,很多计算机爱好者非常渴望有一个便宜或者免费的操作系统供大家学习研究。1983年,计算机界的牛人Richard Stallman发起了一个计划,目的就是构建一套完全自由的操作系统,这个计划就是著名的GNU计划。所谓完全自由,就是要求加入GNU计划的所有软件都必须自由使用、自由更改、自由发布。也就是说,软件发布必须要发布它的源代码,这个源代码可以供别人自由使用,也可以随便更改,但是必须要把更改后的代码发布。当然,光说不行,必须要有明文规定许可协议来制约大家如何自由使用,这套规定许就是著名的GPL协议。
GNU计划发起后,有很多支持者,所以在这期间产生了许多非常棒的软件,比如vi、Emacs、GCC等。但遗憾的是,一直没有一个比较完美的操作系统出现。直到1991年,芬兰大学生林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds)基于兴趣开发了一个类Unix操作系统,一经发布便得到了广大爱好者的追捧,这个系统就是Linux。1994年,Linux加入GNU计划并采用GPL协议发布。自此,GNU/Linux真正实现了构建一套完全自由的操作系统的设想。
如果你以前从未接触过Linux,可能就不清楚为什么会有这么多不同的Linux发行版。在查看Linux软件包时,你肯定被发行版、LiveCD和GNU之类的术语搞晕过。初次进入Linux世界会让人觉得不那么得心应手。在开始学习命令和脚本之前,我们将为你稍稍揭开Linux系统的神秘面纱。
Linux可划分为以下四部分:
每一部分在Linux系统中各司其职。但就单个部分而言,其作用并不大。图1是一个基本结构框图,展示了各部分是如何协作起来构成整个Linux系统的。下面我们将详细介绍这四部分,然后概述它们如何通过协作构成一个完整的Linux系统。
图1 Linux系统
深入探究Linux内核
Linux系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。
Linus还在赫尔辛基大学上学时就开发了第一版Linux内核。起初他只是想仿造一款Unix系统而已,因为当时Unix操作系统在很多大学都很流行。
Linus完成了开发工作后,将Linux内核发布到了互联网社区,并征求改进意见。这个简单的举动引发了计算机操作系统领域内的一场革命。很快,Linus就收到了来自世界各地的学生和专业程序员的各种建议。
如果谁都可以修改内核程序代码,那么随之而来的将是彻底的混乱。为了简单起见,Linus担当起了所有改进建议的把关员。能否将建议代码并入内核完全取决于Linus。时至今日,这种概念依然在Linux内核代码开发过程中沿用,不同的是,现在是由一组开发人员来做这件事,而不再是Linus一个人。
内核主要负责以下四种功能:
下面我们进一步探究以上每一种功能。
1. 系统内存管理
操作系统内核的主要功能之一就是内存管理。内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存(即实际并不存在的内存)。
内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。内核不断地在交换空间和实际的物理内存之间反复交换虚拟内存中的内容。这使得系统以为它拥有比物理内存更多的可用内存(如图2所示)。
图2 Linux系统内存映射
内存存储单米按组划分成很多块,这些块称作页面(page)。内核将每个内存页面放在物理内存或交换空间。然后,内核会维护一个内存页面表,指明哪些页面位于物理内存内,哪些页面被换到了磁盘上。
内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域(称为换出,swapping out)——即使还有可用内存。当程序要访问一个已被换出的内存页面时,内核必须从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。显然,这个过程要花费时间,拖慢运行中的进程。只要Linux系统在运行,为运行中的程序换出内存页面的过程就不会停歇。
2. 软件程序管理
Linux操作系统将运行中的程序称为进程。进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行,隐藏到幕后。内核控制着Linux系统如何管理运行在系统上的所有进程。
内核创建了第一个进程(称为init进程)来启动系统上所有其他进程。当内核启动时,它会将init进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。
一些Linux发行版使用一个表来管理在系统开机时要自动启动的进程。在Linux系统上,这个表通常位于专门文件/etc/inittab中。
另外一些系统(比如现在流行的Ubuntu Linux发行版)则采用/etc/init.d目录,将开机时启动或停止某个应用的脚本放在这个目录下。这些脚本通过/etc/rcX.d目录下的入口(entry)*启动,这里的X代表运行级(run level)。
*这些入口实际上是到/etc/init.d目录中启动脚本的符号链接。
Linux操作系统的init系统采用了运行级。运行级决定了init进程运行/etc/inittab文件或/etc/rcX.d目录中定义好的某些特定类型的进程。Linux操作系统有5个启动运行级。
运行级为1时,只启动基本的系统进程以及一个控制台终端进程。我们称之为单用户模式。单用户模式通常用来在系统有问题时进行紧急的文件系统维护。显然,在这种模式下,仅有一个人(通常是系统管理员)能登录到系统上操作数据。
标准的启动运行级是3。在这个运行级上,大多数应用软件,比如网络支持程序,都会启动。另一个Linux中常见的运行级是5。在这个运行级上系统会启动图形化的X Window系统,允许用户通过图形化桌面窗口登录系统。
Linux系统可以通过调整启动运行级来控制整个系统的功能。通过将运行级从3调整成5,系统就可以从基于控制台的系统变成更先进的图形化X Window系统。
3. 硬件设备管理
内核的另一职责是管理硬件设备。任何Linux系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核与设备之间交换数据。在Linux内核中有两种方法用于插入设备驱动代码:
以前,插入设备驱动代码的唯一途径是重新编译内核。每次给系统添加新设备,都要重新编译一遍内核代码。随着Linux内核支持的硬件设备越来越多,这个过程变得越来越低效。不过好在Linux开发人员设计出了一种更好的将驱动代码插入运行中的内核的方法。
开发人员提出了内核模块的概念。它允许将驱动代码插入到运行中的内核而无需重新编译内核。同时,当设备不再使用时也可将内核模块从内核中移走。这种方式极大地简化和扩展了硬件设备在Linux上的使用。
Linux系统将硬件设备当成特殊的文件,称为设备文件。设备文件有3种分类:
字符型设备文件是指处理数据时每次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。块设备文件是指处理数据时每次能处理大块数据的设备,比如硬盘。
网络设备文件是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许Linux系统使用常见的网络编程协议同自身通信。
Linux为系统上的每个设备都创建一种称为节点的特殊文件。与设备的所有通信都通过设备节点完成。每个节点都有唯一的数值对供Linux内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识主设备组下的某个特定设备。
4. 文件系统管理
不同于其他一些操作系统,Linux内核支持通过不同类型的文件系统从硬盘中读写数据。除了自有的诸多文件系统外,Linux还支持从其他操作系统(比如Microsoft Windows)采用的文件系统中读写数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。表1列出了Linux系统用来读写数据的标准文件系统。
表1 Linux文件系统
Linux服务器所访问的所有硬盘都必须格式化成表1所列文件系统类型中的一种。
Linux内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。这为Linux内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统都被挂载和使用时,VFS将信息都缓存在内存中。
GNU工具
除了由内核控制硬件设备外,操作系统还需要工具来执行一些标准功能,比如控制文件和程序。Linus在创建Linux系统内核时,并没有可用的系统工具。然而他很幸运,就在开发Linux内核的同时,有一群人正在互联网上共同努力,模仿Unix操作系统开发一系列标准的计算机系统工具。
GNU组织(GNU是GNU's Not Unix的缩写)开发了一套完整的Unix工具,但没有可以运行它们的内核系统。这些工具是在名为开源软件(open source software,OSS)的软件理念下开发的。
开源软件理念允许程序员开发软件,并将其免费发布。任何人都可以使用、修改该软件,或将该软件集成进自己的系统,无需支付任何授权费用。将Linus的Linux内核和GNU操作系统工具整合起来,就产生了一款完整的、功能丰富的免费操作系统。
尽管通常将Linux内核和GNU工具的结合体称为Linux,但你也会在互联网上看到一些Linux纯粹主义者将其称为GNU/Linux系统,藉此向GNU组织所作的贡献致意。
1. 核心GNU工具
GNU项目的主旨在于为Unix系统管理员设计出一套类似于Unix的环境。这个目标促使该项目移植了很多常见的Unix系统命令行工具。供Linux系统使用的这组核心工具被称为coreutils(core utilities)软件包。
GNU coreutils软件包由三部分构成:
这三组主要工具中的每一组都包含一些对Linux系统管理员和程序员至关重要的工具。
2. shell
GNU/Linux shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。
shell包含了一组内部命令,用这些命令可以完成诸如复制文件、移动文件、重命名文件、显示和终止系统中正运行的程序等操作。shell也允许你在命令行提示符中输入程序的名称,它会将程序名传递给内核以启动它。
你也可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。你在命令行上执行的任何命令都可放进一个shell脚本中作为一组命令执行。这为创建那种需要把几个命令放在一起来工作的工具提供了便利。
在Linux系统上,通常有好几种Linux shell可用。不同的shell有不同的特性,有些更利于创建脚本,有些则更利于管理进程。所有Linux发行版默认的shell都是bash shell。bash shell由GNU项目开发,被当作标准Unix shell——Bourne shell(以创建者的名字命名)的替代品。bash shell的名称就是针对Bourne shell的拼写所玩的一个文字游戏,称为Bourne again shell。
表2列出了Linux中常见的几种不同shell。
表 2 Linux shell
大多数Linux发行版包含多个shell,但它们通常会采用其中一个作为默认shell。如果你的Linux发行版包含多个shell,就请尽情尝试不同的shell,看看哪个能满足你的需要。
Linux桌面环境
在Linux的早期(20世纪90年代初期),能用的只有一个简单的Linux操作系统文本界面。这个文本界面允许系统管理员运行程序,控制程序的执行,以及在系统中移动文件。
随着Microsoft Windows的普及,电脑用户已经不再满足于对着老式的文本界面工作了。这推动了OSS社区的更多开发活动,Linux图形化桌面环境应运而生。
完成工作的方式不止一种,Linux一直以来都以此而闻名。在图形化桌面上更是如此。Linux有各种图形化桌面可供选择。下面介绍其中一些比较流行的桌面。
1. X Window系统
有两个基本要素决定了视频环境:显卡和显示器。要在电脑上显示绚丽的画面,Linux软件就得知道如何与这两者互通。X Window软件是图形显示的核心部分。
X Window软件是直接和PC上的显卡及显示器打交道的底层程序。它控制着Linux程序如何在电脑上显示出漂亮的窗口和图形。
Linux并非唯一使用X Window的操作系统,它有针对不同操作系统的版本。在Linux世界里,能够实现X Window的软件包可不止一种。
其中最流行的软件包是X.org。它提供了X Window系统的开源实现,支持当前市面上的很多新显卡。
另外两个X Window软件包也日渐流行。Fedora Linux发行版采用了试验性的Wayland软件;Ubuntu Linux发行版开发出了Mir显示服务器,用于其桌面环境。
在首次安装Linux发行版时,它会检测显卡和显示器,然后创建一个含有必要信息的X Window配置文件。在安装过程中,你可能会注意到安装程序会检测一次显示器,以此来确定所支持的视频模式。有时这会造成显示器黑屏几秒。由于现在有多种不同类型的显卡和显示器,这个过程可能会需要一段时间来完成。
核心的X Window软件可以产生图形化显示环境,但仅此而已。虽然对于运行独立应用这已经足够,但在日常PC使用中却并不是那么有用。它没有桌面环境供用户操作文件或是开启程序。为此,你需要一个建立在X Window系统软件之上的桌面环境。
2. KDE桌面
KDE(K Desktop Environment,K桌面环境)最初于1996年作为开源项目发布。它会生成一个类似于Microsoft Windows的图形化桌面环境。如果你是Windows用户,KDE就集成了所有你熟悉的功能。图1-3展示了运行在openSuSE Linux发行版上的KDE 4桌面。
图 3 openSuSE Linux系统上的KDE 4桌面
KDE桌面允许你把应用程序图标和文件图标放置在桌面的特定位置上。单击应用程序图标,Linux系统就会运行该应用程序。单击文件图标,KDE桌面就会确定使用哪种应用程序来处理该文件。
桌面底部的横条称为面板,由以下四部分构成。
所有的面板功能都和你在Windows上看到的类似。除了桌面功能,KDE项目还开发了大量的可运行在KDE环境中的应用程序。
3. GNOME桌面
GNOME(the GNU Network Object Model Environment,GNU网络对象模型环境)是另一个流行的Linux桌面环境。GNOME于1999年首次发布,现已成为许多Linux发行版默认的桌面环境(不过用得最多的是Red Hat Linux)。
尽管GNOME决定不再沿用Microsoft Windows的标准观感(look-and-feel),但它还是集成了许多Windows用户习惯的功能:
图4展示了CentOS Linux发行版采用的标准GNOME桌面。
图4 CentOS Linux系统上的GNOME桌面
GNOME开发人员不甘示弱于KDE,也开发了一批集成进GNOME桌面的图形化程序。
4. Unity桌面
如果你用的是Ubuntu Linux发行版,你会注意到它与KDE和GNOME桌面环境有些不一样。准确来说,这是因为负责开发Ubuntu的公司决定采用自己的一套叫作Unity的Linux桌面环境。
Unity桌面得名于该项目的目标——为工作站、平板电脑以及移动设备提供一致的桌面体验。不管你是在工作站还是在手机上使用Ubuntu,Unity桌面的使用方式都是一样的。图5展示了Ubuntu 14.04 LTS中的Unity桌面。
图5 Ubuntu Linux系统上的Unity桌面
5. 其他桌面
图形化桌面环境的弊端在于它们要占用相当一部分的系统资源来保证正常运行。在Linux发展之初,Linux的标志和卖点之一就是它可以运行在处理能力较弱的老旧PC上,这些PC无力运行较新的微软桌面。然而随着KDE和GNOME桌面环境的普及,情况发生了变化。运行KDE或GNOME桌面要占用的内存资源和微软的最新桌面环境旗鼓相当。
如果你的PC已经有些年代了,也不要泄气。Linux开发人员已经联手让Linux返璞归真。他们开发了一些低内存开销的图形化桌面应用,提供了能够在老旧PC上完美运行的基本功能。尽管这些图形化桌面环境并没有大量专为其设计的应用,但它们仍然能运行许多基本的图形化程序,支持如文字处理、电子表格、数据库、绘图以及多媒体等功能。
表3列出了一些可在配置较低的PC和笔记本电脑上运行的轻量级Linux图形化桌面环境。
表3 其他Linux图形化桌面
这些图形化桌面环境并不如KDE或GNOME桌面一样绚丽,但却提供了恰到好处的基本图形化功能。图6展示了Puppy Linux antiX发行版所采用的JWM桌面的外观。
图6 Puppy Linux发行版所采用的JWM桌面
如果你用的是老旧PC,尝试一下基于上述某个桌面环境的Linux发行版,看看怎么样,可能会有惊喜哦。
到此为止,你已经了解了构成完整Linux系统所需要的4个关键部件,那你可能在考虑要怎样才能把它们组成一个Linux系统。幸运的是,已经有人为你做好这些了。
我们将完整的Linux系统包称为发行版。有很多不同的Linux发行版来满足可能存在的各种运算需求。大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或者普通家庭用户。每个定制的发行版都包含了支持特定功能所需的各种软件包,比如为多媒体爱好者准备的音频和视频编辑软件,为软件开发人员准备的编译器和集成开发环境(IDE)。
不同的Linux发行版通常归类为3种:
下面我们探讨一下这些不同类型的Linux发行版,然后展示每种类型中一些Linux发行版示例。
1.核心Linux发行版
核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好的几乎所有能见到的Linux应用。它提供了一站式的完整Linux安装。表4列出了一些较流行的核心Linux发行版。
表4 核心Linux发行版
在Linux的早期,发行版是作为一叠软盘发布的。你必须下载多组文件,然后将其复制到软盘上。通常要用20张或更多的软盘来创建一个完整的发行版!毋庸多言,这是个痛苦的过程。
现今,家用电脑基本都有内置的CD和DVD光驱,Linux发行版也就用一组CD光盘或单张DVD光盘来发布。这大大简化了Linux的安装过程。
然而当新手在安装核心Linux发行版时,仍然经常遇到各种各样的问题。为了照顾到Linux用户的所有使用情景,单个发行版必须包含很多应用软件。从高端的Internet数据库服务器到常见的游戏,可谓应用尽有。鉴于Linux上可用应用程序的数量,一个完整的发行版通常至少要4张CD。
尽管发行版中的大量可选配置对Linux极客来说是好事,但对新手来说就是一场噩梦。多数发行版会在安装过程中询问一系列问题,以决定哪些应用要默认加载、PC上连接了哪些硬件以及怎样配置硬件设备。新手经常会被这些问题困扰,因此,他们经常是要么加载了过多的程序,要么没有加载够,到后来才发现计算机并没有按照他们预想的方式工作。
对新手来说,幸运的是,安装Linux还有更简便的方法。
特定用途的Linux发行版
Linux发行版的一个新子群已经出现了。它们通常基于某个主流发行版,但仅包含主流发行版中一小部分用于某种特定用途的应用程序。
除了提供特定软件外(比如仅为商业用户提供的办公应用),定制化发行版还尝试通过自动检测和自动配置常见硬件来帮助新手安装Linux。这使得Linux的安装过程轻松愉悦了许多。
表5列出了一些特定用途的Linux发行版以及它们的专长。
这只是特定用途的Linux发行版中的一小部分而已。像这样的发行版足有上百款,而且在互联网上还不断有新的成员加入。不管你的专长是什么,你都能找到一款为你量身定做的Linux发行版。
表5 特定用途的Linux发行版
许多特定用途的Linux发行版都是基于Debian Linux。它们使用和Debian一样的安装文件,但仅打包了完整Debian系统中的一小部分。
2.Linux LiveCD
Linux世界中一个相对较新的现象是可引导的Linux CD发行版的出现。它无需安装就可以看到Linux系统是什么样的。多数现代PC都能从CD启动,而不是必须从标准硬盘启动。基于这点,一些Linux发行版创建了含有Linux样本系统(称为Linux LiveCD)的可引导CD。由于单张CD容量的限制,这个样本并非完整的Linux系统,不过令人惊喜的是,你可以自己加入各种软件。结果就是,你可以通过CD来启动PC,并且无需在硬盘安装任何东西就能运行Linux发行版。
这是一个不弄乱PC就体验各种Linux发行版的绝妙方法。只需插入CD就能引导了!所有的Linux软件都将直接从CD上运行。你可以从互联网上下载各种Linux LiveCD,刻录,然后体验。
表6列出了一些可用的流行Linux LiveCD。
表6 Linux LiveCD发行版
你能在这张表中看到熟悉的面孔。许多特定用途的Linux发行版都有对应的Linux LiveCD版本。一些Linux LiveCD发行版,比如Ubuntu,允许直接从LiveCD安装整个发行版。这使你可以从CD引导启动,先体验一下此Linux发行版,如果喜欢的话,再把它安装到硬盘上。这个功能极其方便易用。
就像所有美好的事物一样,Linux LiveCD也有一些不足之处。由于要从CD上访问所有东西,应用程序会运行得更慢,而如果再搭配上陈旧缓慢的PC和光驱,那更是慢上加慢。还有,由于无法向CD写入数据,对Linux系统作的任何修改都会在重启后失效。
不过,有一些Linux LiveCD的改进帮助解决了上述一些问题。这些改进包括:
一些Linux LiveCD,如Puppy Linux,只包含最少数量的Linux系统文件。当CD引导启动时,LiveCD的启动脚本直接把它们复制到内存中。这允许在Linux启动后立即把CD从光驱中取走。这不仅提高了程序运行速度(因为程序从内存中运行时更快),而且还空出了CD光驱,供你用Puppy Linux自带的软件转录音频CD或播放视频DVD。
其他Linux LiveCD用另外的方法,同样允许你在启动后将CD从光驱中拿走。这种方法是将核心Linux文件作为一个文件复制到Windows硬盘上。待CD启动后,系统会寻找那个文件,并从中读取系统文件。dyne:bolic Linux LiveCD采用的就是这种技术,我们称之为对接。当然,你必须在从CD引导启动之前把系统文件复制到硬盘里。
一种非常流行的技术就是用常见的U盘(也称为闪存或闪盘)来存储Linux LiveCD会话数据。几乎每个Linux LiveCD都能识别插入的U盘(即使是在Windows下格式化的)并从U盘上读写文件。这允许你启动Linux LiveCD,使用Linux应用来创建文件,再将这些文件存储在U盘上,然后用Windows应用(或者在另外一台电脑上)访问这些文件。这该有多酷!
本文探讨了Linux系统及其基本工作原理。Linux内核是系统的核心,控制着内存、程序和硬件之间的交互。GNU工具也是Linux系统中的一个重要部分。我们还讨论了Linux系统中的最后一个组件:Linux桌面环境。随着时间推移,一切都发生了改变。现今的Linux可以支持多种图形化桌面环境。
本文还探讨了各种Linux发行版。Linux发行版就是把Linux系统的各个不同部分汇集起来组成一个易于安装的包。Linux发行版有囊括各种软件的成熟的Linux发行版,也有只包含针对某种特定功能软件包的特定用途发行版。Linux LiveCD则是一种无需将Linux安装到硬盘就能体验Linux的发行版。
79736 篇文章