一.认识Linux
Linux系统可以划分为四个部分
- Linux内核
- GNU工具
- 图形化桌面环境
- 应用软件
1.Linux内核
主要功能有
- 系统内存管理
- 软件程序管理
- 硬件设备管理
- 文件系统管理
(1)系统内存管理
内核管理可用物理内存,还可以创建并管理虚拟内存。内核通过硬盘上称为交换空间
(swap space)的存储区域来实现虚拟内存。内核在交换空间和实际的物理内存之间反复交换虚拟内存中的内容,使得系统以为自己拥有比物理内存更多的可用内存。
内存被划分为多个页面page,每个页面在物理内存或者交换空间中,内核维护一张内存页面表来表征每个页面在哪里。内核还会自动把一段时间没有访问过的页面换出到交换空间,当要访问交换空间的页面时需要先将其换入到物理内存中。
(2)软件程序管理
Linux系统中运行中的程序称为进程,进程可以在前台运行也可以在后台运行。内核创建了第一个进程来启动所有其他进程,称为init进程,内核启动时,会将init进程载入虚拟内存,启动其他进程时,在虚拟内存中分配一个专有空间来存储该进程用的数据和代码。
在 Linux 中,有多种 init 进程实现,目前最流行的两种
SysVinit
Linux 最初使用的是 SysVinit(SysV)初始化方法,该方法基于 Unix System V
初始化方法。很多发行版已经不使用了。
SysVinit 初始化方法使用运行级(runlevel)的概念来决定启动哪个进程。运行级定义了 Linux系统的运行状态以及每种状态下应该运行的进程。
/etc/inittab 文件定义了系统的默认运行级。特定运行级下启动的进程是在/etc/rc.d 目录下的各个子目录中定义的。可以使用 runlevel 命令随时查看当前运行级。
但现在inittab有些系统上是不使用的
systemd
systemd 初始化方法诞生于 2010 年,现在已经成为 Linux 发行版中最流行的初
始化和进程管理系统。
方法得以流行起来的原因在于能够根据不同的事件启动进程- 系统启动时
- 连接到特定的硬件设备时
- 服务启动时
- 建立好网络连接时
- 计时器到期时
systemd 方法通过将事件与单元文件(unit file) 链接来决定运行哪些进程。每个单元文件定义了特定事件发生时要启动的程序。systemctl 程序允许启动、停止和列出系统中当前运行的单元文件。
systemd 方法将单元文件划归为目标(target)。目标定义了 Linux 系统的特定运行状态,这和SysVinit 运行级的概念类似。在系统启动时,default.target 单元定义了要启动的所有单元文件。可以使用 systemctl 命令查看当前默认目标
graphical.target 单元文件定义了多用户图形环境运行时要启动的进程,类似于旧的
SysVinit 运行级 5。
(3)硬件设备管理
任何 Linux 系统需要通信的设备都必须在内核代码中加入其驱动程序,相当于应用程序和硬件设备的“中间人”,允许内核同设备之间交换数据。向内核插入设备驱动的方法有两种:
- 将驱动程序编译入内核
以前,插入设备驱动程序的唯一途径就是重新编译内核。每次给系统添加新设备时,都不得不重新编译一遍内核代码。随着 Linux 内核支持的硬件设备越来越多,这个过程也变得越来越低效。 - 将设备驱动模块加入内核
开发人员提出了内核模块的概念,允许在无须重新编译内核的情况下将驱动程序插入运行中的内核。另外,当设备不再使用时也可将内核模块从内核中移走。
Linux 系统将硬件设备视为一种特殊文件,称为设备文件。
- 字符设备文件
对应于每次只能处理一个字符的设备。大多数类型的调制解调器和终端是作为字符设备文件创建的。 - 块设备文件
块设备文件对应于每次以块形式处理数据的设备,比如硬盘驱动器。 - 网络设备文件
对应于采用数据包发送和接收数据的设备,这包括网卡和一个特殊的环回设备,后者允许 Linux 系统使用常见的网络编程协议同自身通信。
Linux为系统的每个设备都创建一种叫节点的特殊文件。与设备的所有通信都是通过设备节点完成的。每个节点都有一个唯一的数值对,以供内核标识。数值对包括一个主设备号和一个次设备号,类似的设备会被划分到相同的主设备号下,次设备号用于标识主设备组下的某个特定设备。
(4)文件系统管理
Linux 内核支持通过不同类型的文件系统读写硬盘数据。除了自有的多种文件系统,Linux 还能够读写其他操作系统(比如 Microsoft Windows)的文件系统。内核必须在编译时就加入对所有要用到的文件系统的支持。
Linux 服务器所访问的所有硬盘驱动器都必须采用表中的一种进行格式化。Linux 内核采用虚拟文件系统(virtual file system,VFS)作为和各种文件系统交互的接口。这为 Linux 内核与其他类型文件系统之间的通信提供了一个标准接口。当文件系统被挂载和使用时,VFS 会在内存中缓存相关信息。
2.GNU实用工具
由内核来控制硬件设备,操作系统还需要实用工具来实现各种标准功能,比如控制文件和程序。GNU(GNU代表 GNU’s Not Unix)组织开发出了一套完整的 Unix 实用工具,但是缺少用于支撑其运行的内核系统。这些实用工具是在 开源软件(open source software,OSS)理念下诞生的。通常将 Linux 内核和 GNU 实用工具的结合体称为 Linux,但是有些人也会将其称为 GNU/Linux 系统。
(1)核心 GNU 实用工具
GNU想要为Unix系统管理员提供一个类Unix环境,因此拿了很多Unix的命令行工具,这组核心工具被称为 coreutils(core utilities)软件包。 软件包有三部分
- 文件实用工具
- 文本实用工具
- 进程实用工具
(2)shell
Linux shell 是一种特殊的交互式工具,提供了启动程序、文件以及进程的方法。shell的核心是命令行提示符,负责shell的交互部分,允许用户输入文本命令,然后解释命令并在内核中执行。
shell包含一组可以实现基础操作的命令,同时也允许直接输入程序名,shell将程序名传递给内核来启动程序。也可以将多个shell命令放入一个文件中作为程序执行。这些文件称作 shell脚本 。
在Linux系统中,有多种shell可供使用。不同的shell有不同的特性,有些适用于创建脚本,有些则适用于管理进程。所有 Linux 发行版默认的shell都是由GNU项目开发的bash shell。
3.桌面环境
(1)X Window 软件
Linux 最常用的两种 X Window 软件包
- X.org
X.org 基于最初的 Unix X Window System 版本 11(常称作 X11),属于两者中比较旧的实现。 - Wayland
越来越多的 Linux 发行版正在向更新的 Wayland 迁移,后者更加安全,也更易于维护。
X Window 软件是直接和 PC 显卡以及显示器打交道的底层程序,控制着 Linux 应用程序如何在计算机上呈现漂亮的窗口和图形。核心的 X Window 软件能够生成图形化显示环境,但仅此而已。尽管这已经足以运行单独的应用程序,但在日常的计算机使用中并不是特别有用,因为没有桌面环境可供用户操作文件或是启动程序,需要一款建立在 X Window 系统软件之上的桌面环境。(这两者现在常常已经集成在别的环境里了)
(2)KDE Plasma 桌面
KDE(K desktop environment,K 桌面环境) 最初于 1996 年作为开源项目发布,能够生成类似于 Microsoft Windows 的图形化桌面环境。
桌面底部的横条称为面板(Panel),由 4 部分构成。
- K 菜单:和 Windows 的开始菜单非常类似,K 菜单包含了启动已安装应用程序的链接。
- 程序快捷方式:这些是直接从面板启动应用程序的快速链接。
- 任务栏:任务栏显示着桌面当前正运行的应用程序的图标。
- 小程序:面板上还有一些小应用程序的图标,经常会根据应用程序的状态发生变化。
(3)GNOME 桌面
GNOME( GNU network object model environment,GNU 网络对象模型环境) 是另一个流行的 Linux 桌面环境。
GNOME 3 桌面通过将可用菜单数减少至 3 个来清理桌面界面。
- Activities(活动):显示收藏的以及正在运行的应用程序图标。
- Calendar(日历):显示当前日期/时间以及系统提示消息。
- System(系统):显示网络连接、系统设置以及系统重启选项。
(4)其他桌面
当 GNOME 桌面项目在版本 3 中彻底更改了其界面时,许多喜欢 GNOME 2 观感的 Linux 开发人员创建了基于 GNOME 2 的衍生版本,
- Cinnamon:由 Linux Mint 发行版于 2011 年开发的,旨在延续原先的GNOME 2 桌面。该桌面目前在包括 Ubuntu、Fedora 和 openSUSE 在内的多个 Linux 发行版中作为选项提供。
- MATE:MATE 桌面是由讨厌 GNOME 3 的 Arch Linux 用户于 2011 年开发的。该桌面融入了一些 GNOME 3 的特性(比如替换了任务栏),但是维持了 GNOME 2 的整体观感。
这些炫目的图形化桌面环境的缺点在于需要可观的系统资源才能正常运作。一些可用于低端 PC 和笔记本计算机的小型 Linux 图形化桌面环境。
比如我在我的CentOSStream9上下载的Xfce
二.发行版
我们将完整的 Linux 系统包称为发行版。大量不同的 Linux 发行版可以满足你可能存在的各种计算需求。大多数发行版是为某个特定用户群定制的,比如商业用户、多媒体爱好者、软件开发人员或者普通家庭用户。
Linux 发行版通常分为两类。
- 完整的核心 Linux 发行版
- 特定用途的 Linux 发行版
(1)核心 Linux 发行版
核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好的大部分可用的Linux应用程序。
在 Linux 早期,发行版是以多张软盘形式发布的。你必须下载一堆文件,然后将其复制到软盘上。整个发行版通常要用到 20 张或更多的软盘。如今,Linux 发行版采用 ISO 镜像文件形式发布。ISO 镜像是一个包含了完整的 DVD 镜像的文件。你可以使用软件将其刻录成 DVD 或是创建可引导的 U 盘。然后只需从 DVD 或 U 盘引导计算机即可安装 Linux。
(2)特定用途的 Linux 发行版
Linux 发行版的一个新子群,它们通常基于某个主流发行版,但仅包含其中一部分用于某种特定用途的应用程序,还尝试通过自动检测和自动配置常见硬件来帮助新手安装 Linux。
大多数 Linux 发行版也有 LiveCD 版本可用。LiveCD 版本是一个自成一体(self-contained)的 ISO 镜像文件,可以刻录成 DVD(或写入 U 盘),直接引导 Linux 系统,是另一种无须将 Linux 安装到硬盘就能体验 Linux 的发行版。