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 系统的第一个用户空间进程,负责启动和管理系统的其他进程。例如,它负责根据配置文件启动系统服务,如网络服务、日志服务、用户登录服务等,最终,启动登录管理器,允许用户登录系统。