Linux 系统编程概述
Linux 系统编程主要介绍 Linux 系统基础、Shell 编程、系统程序设计等内容,其以操作系统、计算机网络、数据结构算法和 C 语言为基础,最终向在生产环境中实现高效、稳定的系统程序的目标迈进。
Linux 系统介绍
Linux 是一种自由、开源的类 Unix 操作系统。Unix 系统最早由 AT&T 公司开发,后来被多家公司进行了改进和扩展,形成了多种不同的 Unix 系统。这一类 Unix 系统并不都是开源的(甚至绝大部分都是闭源的),因此对于 Unix 系统的学习和使用受到了很大的限制。1991 年,Linus Torvalds 出于个人兴趣开始编写一个类 Unix 的操作系统,并于当年写出了第一个版本的内核。从此,Linux 逐渐发展成为一个庞大的开源社区,吸引了全球的程序员参与其中,最终形成了今天的 Linux 系统。
一般的 Linux 系统实际上是指 GNU/Linux 系统,即 Linux 内核与 GNU 工具集合的组合。Linux 内核是 Linux 系统的核心,负责管理硬件资源、提供系统调用接口等。GNU 工具集合则提供了一系列的工具,如 bash、gcc、gdb 等,用于完成系统管理、软件开发等任务。另外,Linux 系统具体上还有很多不同的发行版,如 Ubuntu、CentOS、Debian 等,这些发行版在 Linux 内核和 GNU 工具集合的基础上进行了进一步的封装和定制,以适应不同的用户需求。
Linux 与其他操作系统相比最大的特点即是开源、自由。它在 GPL 协议(GNU General Public Licence)下发布,任何人都可以查看、修改、复制、发布源代码,这使得 Linux 系统具有很高的灵活性和可定制性。
关于开源软件协议
开源软件协议是保护开源软件的法律基础,它规定了开源软件的使用、修改、复制、发布等行为。常见的开源软件协议有 GPL、BSD、MIT 等,这些协议在保护开源软件的基础上,又有着不同的约束和限制。
| 协议 | 衍生作品需开源? | 允许闭源商用? | 专利条款 | 典型项目 |
|---|---|---|---|---|
| MIT | ❌ | ✔️ | ❌ | React, Ruby on Rails |
| GPL | ✔️ | ❌ | GPLv3 有 | Linux, GIMP |
| Apache 2.0 | ❌(修改需标注) | ✔️ | ✔️ | Android, Kafka |
| BSD 3-Clause | ❌ | ✔️ | ❌ | FreeBSD |
| LGPL | 仅修改部分需开源 | ✔️(动态链接) | ❌ | GTK |
在项目中添加 LICENSE 文件并明确标注版权声明。若不确定,可参考 Choose a License 或咨询法律专家。
安装 Linux 系统
目前安装 Linux 系统一般较为简单,有较为丰富的图形化界面和向导,用户只需按照提示进行操作即可。这里着重介绍磁盘分区相关知识。
磁盘分区一般分为两种方式:MBR 和 GPT。MBR 是传统的磁盘分区方式,最多支持 4 个主分区(主分区指可以引导启动的分区),每个主分区最多支持 2TB 的容量。由于磁盘的发展,GPT 逐渐取代了 MBR,支持最多 128 个分区,每个分区最多支持 18EB 的容量。在安装 Linux 系统时,一般推荐使用 GPT 分区方式。
分区的目的是为了将磁盘划分为不同的区域,以便于存储不同类型的数据,提高数据的安全性和可靠性。不同分区还可以使用不同的文件系统,以适应不同的需求。Windows 的文件系统一般为 NTFS、FAT32 等,Linux 的文件系统一般为 ext2/3/4、xfs 等,macOS 的文件系统一般为 HFS+、APFS 等。移动设备一般使用 exFAT 文件系统。
可以在安装的过程中将 Linux 的文件夹映射到不同的分区。常见的 Linux 分区模式为:
/:根分区,存放系统文件,一般为 20GB 左右。/boot:启动分区,存放系统引导的相关配置文件,一般为 20MB 左右。/home:用户分区,存放用户数据,一般为剩余空间。/swap:交换分区,用于系统内存不足时的数据交换,一般为内存的 2 倍。/var:变量分区,存放系统日志、缓存等,一般为 10GB 左右。
Linux 启动流程
Linux 系统的启动流程主要分为以下几个步骤:上电、BIOS、bootloader、内核、init 等。

Linux 系统的启动流程
- 上电:主要通过按钮连接的信号线向主板发送启动信号,主板接收到信号后开始启动。
- BIOS/UEFI:BIOS/UEFI 进行硬件检测和初始化(POST),然后根据配置的启动顺序(如硬盘、USB、光盘等)寻找可启动的设备。一旦找到可启动设备,BIOS/UEFI 将加载该设备的引导扇区(包括
bootloader)到内存中。 - bootloader:
bootloader是一个小程序,主要负责加载内核到内存中。常见的bootloader有GRUB、LILO,其中LILO一般用于较老的系统。它可以从/boot分区中读取相应的内核配置(根文件系统的位置、启动模式)等。此外,如果系统中有多个操作系统,bootloader可以提供菜单让用户选择启动哪个系统。 - 内核:内核是操作系统的核心,负责管理系统的硬件资源和进程。内核被加载后,开始初始化 CPU、内存、存储设备、网络设备等硬件,并挂载根文件系统(通常是 /)。最后,内核启动第一个用户空间进程
init(或systemd)。 init:init是 Linux 系统的第一个用户空间进程,负责启动和管理系统的其他进程。例如,它负责根据配置文件启动系统服务,如网络服务、日志服务、用户登录服务等,最终,启动登录管理器,允许用户登录系统。
