重点摘要
1. Linux 完全控制系统
与某些操作系统不同,Linux 不会试图隐藏重要部分,而是给予用户对计算机的完全控制。
透明性与访问权限。 Linux 的独特之处在于为用户提供对系统内部运作的完全访问。这种设计理念使用户能够理解并修改他们的计算环境,从而加深对操作系统功能的理解。这种控制程度与那些抽象掉关键组件的系统截然不同,使得 Linux 成为学习和定制的理想平台。
通过理解掌握。 要真正发挥 Linux 的强大功能,用户必须深入了解其内部结构。这包括理解启动过程、网络协议以及内核在管理系统资源中的作用。掌握这些基本概念后,用户能够排除故障、优化性能,并根据特定需求调整操作系统。
赋权与定制。 Linux 内部的可访问性转化为无与伦比的定制选项。用户可以修改系统配置、编写自定义脚本,甚至为内核本身做出贡献。这种控制感增强了用户的归属感,使他们能够根据独特的工作流程和偏好调整操作系统。
2. 内核管理硬件和进程
内核负责决定哪些进程可以使用 CPU。
核心功能。 Linux 内核是操作系统的核心,负责管理系统的硬件和进程。它充当用户级应用程序与底层硬件之间的中介,确保高效和稳定的操作。主要职责包括进程管理、内存分配、设备驱动处理和系统调用支持。
进程调度。 内核决定哪些进程可以访问 CPU,采用调度算法确保公平性,防止任何单个进程垄断系统资源。这涉及上下文切换,内核快速在进程之间切换,创造出同时执行的假象。
内存管理。 内核管理内存分配,确保每个进程都有其专用的内存空间,并防止未经授权访问其他进程的内存。它还实现了虚拟内存,使系统能够将磁盘空间作为 RAM 的扩展,从而执行需要比物理内存更多的程序。
3. Shell 命令是交互的基础
Shell 是 Unix 系统中最重要的部分之一。
命令行界面。 Shell 提供了一个强大的命令行界面(CLI),用于与 Linux 系统交互。用户通过在 shell 中输入命令,可以导航文件系统、执行程序、管理进程以及执行各种其他任务。掌握 shell 命令对于高效的系统管理和脚本编写至关重要。
基本工具。 基本的 shell 命令包括 ls
(列出文件)、cd
(更改目录)、cp
(复制文件)、mv
(移动文件)、rm
(删除文件)和 mkdir
(创建目录)。这些命令构成了许多系统管理任务的基础,并在 shell 脚本中被广泛使用。
Shell 脚本。 Shell 脚本是包含一系列 shell 命令的文本文件。它们允许用户自动化重复性任务、创建自定义工具和管理系统进程。Shell 脚本是系统管理员和开发人员的强大工具,使他们能够简化工作流程并自动化复杂操作。
4. 设备通过文件访问
设备通常只能在内核模式下访问,因为不当访问(例如用户进程请求关闭电源)可能会导致机器崩溃。
设备文件。 Linux 将硬件设备表示为 /dev
目录中的文件。这种抽象使用户空间程序能够使用标准的文件 I/O 操作(如读取和写入)与设备进行交互。设备文件提供了一种一致且统一的接口,用于访问各种硬件组件。
设备类型。 设备文件分为块设备(例如硬盘)、字符设备(例如终端)和命名管道。块设备以固定大小的块进行访问,而字符设备则以数据流的形式进行访问。每个设备文件都与一个主号和次号相关联,内核使用这些编号来识别相应的设备驱动程序。
udev 和动态设备管理。 udev
系统动态管理设备文件,随着设备的连接和断开创建和删除它们。这确保了 /dev
目录准确反映可用硬件,并简化了用户和管理员的设备管理。
5. 文件系统组织磁盘上的数据
建立必要的知识是处理任何技术主题的挑战。
层次结构。 文件系统为存储设备上的数据提供了层次结构。它们定义了文件和目录的存储、访问和管理方式。Linux 支持多种文件系统类型,每种类型都有其优缺点。
常见文件系统类型。 常见的文件系统类型包括 ext4(许多 Linux 发行版的默认文件系统)、XFS、Btrfs 和 FAT32。每种文件系统类型都有其特性,如日志记录、压缩和对大文件的支持。文件系统的选择取决于系统的具体需求和存储的数据类型。
挂载文件系统。 要访问文件系统,必须将其挂载到挂载点,即现有文件系统层次中的一个目录。使用 mount
命令将文件系统附加到挂载点,使其内容对用户和应用程序可访问。/etc/fstab
文件指定哪些文件系统应在启动时自动挂载。
6. 启动加载程序启动内核
启动加载程序在磁盘上找到内核映像,将其加载到内存中并启动它。
基本角色。 启动加载程序是计算机开机时运行的第一个程序。它的主要任务是定位磁盘上的内核映像,将其加载到内存中,并将控制权转移给内核。启动加载程序还提供了选择不同操作系统或内核版本的菜单。
GRUB(Grand Unified Bootloader)。 GRUB 是 Linux 系统中使用最广泛的启动加载程序。它支持多种文件系统和分区方案,允许从不同的存储设备和配置中启动。GRUB 还提供了命令行界面,用于高级配置和故障排除。
启动过程。 启动过程通常涉及 BIOS 或 UEFI 固件从主引导记录(MBR)或 EFI 系统分区(ESP)加载启动加载程序。启动加载程序然后读取其配置文件,向用户呈现菜单,并将所选的内核映像加载到内存中。最后,启动加载程序将控制权转移给内核,启动操作系统的启动序列。
7. Init 系统管理用户空间启动
在这种情况下,每个进程使用 CPU 的时间非常短,然后暂停;接着另一个进程使用 CPU 的时间也很短;然后另一个进程轮流使用 CPU,如此循环。
用户空间初始化。 在内核初始化硬件并挂载根文件系统后,它将控制权转移给 init 系统,负责启动其余的系统服务和进程。init 系统管理用户空间环境,确保所有必要组件正常运行并正确配置。
Systemd、Upstart 和 System V Init。 Linux 有多种可用的 init 系统,包括 Systemd、Upstart 和 System V init。Systemd 是最现代和广泛采用的 init 系统,提供并行启动、依赖管理和服务监控等功能。Upstart 是另一种流行的 init 系统,以其事件驱动架构而闻名。System V init 是传统的 init 系统,依赖于顺序启动过程。
运行级别和目标。 Init 系统使用运行级别或目标来定义系统状态。每个运行级别或目标对应一组特定的服务和进程。例如,图形运行级别或目标将启动显示管理器和桌面环境,而多用户运行级别或目标将启动基本系统服务并提供命令行界面。
8. 配置文件控制系统行为
特别是,大多数系统配置可以在易于阅读的纯文本文件中找到。
纯文本配置。 Linux 在很大程度上依赖纯文本配置文件来控制系统服务和应用程序的行为。这些文件通常位于 /etc
目录中,可以使用任何文本编辑器进行编辑。使用纯文本配置文件使得理解和修改系统设置变得简单。
配置文件格式。 配置文件通常遵循特定格式,如键值对、INI 风格的部分或 shell 脚本。理解这些格式对于有效配置系统服务和应用程序至关重要。许多配置文件还包含注释,提供有关可用选项及其效果的有价值信息。
集中管理。 尽管配置文件分布在系统各处,但 /etc
目录作为管理系统范围设置的中心位置。这使得定位和修改配置文件变得更加容易,确保一致性并简化系统管理。
9. 网络依赖分层协议
理解操作系统如何工作最有效的方法是通过抽象——这是一种华丽的说法,意味着你可以忽略大部分细节。
分层架构。 Linux 中的网络基于分层架构,每一层负责通信的特定方面。最常见的模型是 TCP/IP 模型,它由四层组成:应用层、传输层、网络层和物理层。每一层都建立在下层提供的服务之上,形成一个模块化和灵活的系统。
关键协议。 TCP/IP 模型包括多种协议,如 HTTP(用于网页浏览)、TCP(用于可靠数据传输)、IP(用于寻址和路由)和以太网(用于物理网络访问)。理解这些协议对于排除网络问题和配置网络服务至关重要。
网络配置。 在 Linux 中配置网络涉及设置网络接口、分配 IP 地址、配置路由表和管理 DNS 设置。这些任务可以通过命令行工具手动执行,也可以使用网络管理工具(如 NetworkManager)自动完成。
10. 开发工具支持软件创建
你应该能够让你的软件按照你的意愿运行(当然是在其能力的合理范围内)。
基本工具。 Linux 提供了一套丰富的开发工具,用于创建和管理软件。这些工具包括编译器(如 GCC)、调试器(如 GDB)、构建自动化工具(如 Make)和脚本语言(如 Python、Perl)。掌握这些工具对于在 Linux 上进行软件开发至关重要。
编译器和链接器。 编译器将源代码翻译成机器代码,而链接器则将目标文件和库组合成可执行程序。GNU 编译器集合(GCC)是 Linux 上使用最广泛的编译器,支持多种编程语言,包括 C、C++ 和 Fortran。
构建自动化。 构建自动化工具(如 Make)简化了编译和链接软件项目的过程。Make 使用 Makefile 定义依赖关系和构建规则,使开发人员能够自动化构建过程,确保所有必要组件都被正确编译和链接。
最后更新日期:
评论
《Linux工作原理》获得了大多数积极的评价,读者们称赞其对Linux内部机制的全面而简明的阐述。许多人认为这本书对初学者和有经验的用户都具有教育意义,突出了对复杂主题的清晰解释。该书因其实用的写作风格而受到赞誉,涵盖了从启动过程到网络配置的各个方面。一些读者指出,某些章节可能过于浅显或技术性较强,具体取决于个人的背景。总体而言,这本书被视为理解Linux基础知识和弥补知识空白的宝贵资源。
Similar Books








