Menu Close

什么是 Linux 发行版?一次理解内核、桌面、软件包与系统维护

引言

Ubuntu、Debian、Fedora、Linux Mint 和 Arch Linux 都属于 Linux 发行版。它们可能拥有不同的桌面外观,默认安装不同的软件,也采用不同的更新方式。既然都使用 Linux,它们之间的区别究竟在哪里?

理解这个问题,需要先区分 Linux 内核与完整的操作系统。内核负责管理计算机资源,但一个能够日常使用的系统,还需要库、命令行工具、后台服务、应用程序,以及安装和维护软件的机制。桌面计算机通常还会提供图形界面,服务器则可以主要通过命令行和后台服务工作。

Linux 发行版把这些来自不同项目的组件整合起来,形成一个可以安装、使用和持续维护的系统。了解各部分的作用,有助于理解发行版之间的差异,也能让日常操作和故障排查更有条理。

什么是 Linux 发行版?一次理解内核、桌面、软件包与系统维护

第一章:什么是 Linux 发行版?

Linux 发行版的英文是 Linux distribution,通常简称为 distro。它以 Linux 内核为基础,组合其他软件,并为安装、运行和维护提供完整安排。

其中大部分组件来自独立项目。内核、桌面环境、浏览器、编译器和包管理器,可能由不同的开发团队负责,也有各自的版本和发布计划。发行版维护者需要选择合适的版本,构建软件包,设置默认配置,测试兼容性,并向用户提供更新。

仅仅下载大量软件,并不能自动得到一个可靠的操作系统。软件之间需要相互兼容,依赖的组件必须齐全,配置需要协调,安全修复也必须及时送达。发行版的重要价值,就在于承担了大量这样的整合工作。

发行版还代表一系列长期选择:支持哪些硬件,默认包含哪些软件,采用怎样的更新节奏,以及每个版本维护多长时间。这些选择共同决定了用户的使用体验。

第二章:Linux 内核,管理计算机资源

内核是操作系统中以特权运行的核心。它负责内存管理、进程和线程调度、文件系统、网络功能,并通过驱动程序管理对设备的访问。

当浏览器、编辑器和音乐播放器同时运行时,内核会把它们的线程安排到可用的处理器上执行。程序读取文件时,内核处理相应的文件系统操作;程序通过网络发送数据时,内核负责网络协议栈中的重要工作。同时,内核还会检查权限,协调程序对共享资源的访问。

应用程序通常通过系统调用请求内核服务。开发者往往使用库函数来完成这些操作,由库提供更方便的编程接口,并在需要时调用内核。

桌面环境、浏览器和包管理器都是内核之外的软件。因此,Linux 内核版本与发行版版本是不同的信息。运行 uname -r 可以查看当前内核版本;运行 cat /etc/os-release 则可以查看发行版信息。一个回答“正在运行哪个内核”,另一个回答“周围的软件环境属于哪个发行版”。

第三章:用户空间,库、Shell 和工具

内核之外的大部分软件运行在用户空间,包括应用程序、后台服务、Shell,以及它们使用的库。

库提供能够被多个程序重复使用的功能。GNU C 库通常称为 glibc,在许多桌面和服务器发行版中广泛使用。它提供内存分配、字符串处理,以及访问操作系统功能等接口。有些库函数完全在用户空间中完成工作,另一些则需要通过系统调用请求内核服务。

GNU 还提供 Bash、GCC 编译器集合和 GNU Coreutils 等软件。不过,Linux 发行版并不一定使用同一套用户空间组件。例如,Alpine Linux 使用 musl C 库,并通过 BusyBox 提供许多常用工具。

Shell 是命令解释器,负责理解用户输入的命令,并协调程序执行。Bash 是一种常见的 Shell。ls、cp 和 mkdir 等工具则执行具体任务,分别用于列出文件、复制文件和创建目录。

这些组件可以采用不同实现,而系统仍然使用 Linux 内核。因此,“使用 Linux”并不意味着所有系统都拥有完全相同的库、Shell 和命令行工具。

第四章:从系统启动到后台服务

在一台采用常规安装方式的计算机上,固件首先开始启动过程。随后,引导程序或其他配置好的引导机制加载 Linux 内核。许多系统还会加载初始内存文件系统,也就是 initramfs,其中包含启动早期需要的工具和驱动等组件。

内核随后启动最初的用户空间进程。在许多发行版中,systemd 最终承担系统和服务管理器的角色。它根据配置和依赖关系协调系统启动,并管理后台服务。

SSH 服务、日志服务、定时任务服务和网站服务,都是后台服务的例子。它们不需要用户打开一个应用窗口,也可以在没有图形桌面的系统中运行。

并非所有发行版都使用 systemd,其他系统也可以采用不同的初始化和服务管理方案。无论采用哪种方式,一个正常工作的 Linux 系统,都包含大量用户没有亲手启动、却一直在后台执行任务的软件。

在使用 systemd 的系统中,可以通过 systemctl list-units –type=service –state=running 查看当前运行的服务单元,从而了解桌面或终端背后正在进行的工作。

第五章:桌面、终端和 Shell

桌面环境提供图形工作空间,包括应用菜单、面板、系统设置、文件管理和窗口相关功能。GNOME、KDE Plasma 和 Xfce 都是常见的桌面环境。

桌面环境与发行版是不同的概念。不同发行版可以提供相同的桌面,一个发行版也可能提供多种桌面版本。因此,更换桌面环境不一定意味着更换发行版。

图形应用还需要显示系统的支持。Wayland 是一种现代显示协议;Xwayland 则提供兼容机制,让许多采用 X11 协议的应用能够在 Wayland 会话中运行。

终端模拟器本身也是应用程序。它提供显示文字和接收输入的窗口,而运行在其中的 Shell 负责解释命令。终端与 Shell 相互配合,但并不是同一个程序。

命令行工具并非只有高级用户才能使用。初学者也可以通过简单命令完成明确的任务,而管理员则可以利用命令行进行自动化和远程管理。服务器通常以运行服务为主要目的,因此可以完全不安装桌面环境。

第六章:应用程序、软件包和软件仓库

应用程序完成用户真正需要的工作,例如浏览网页、编辑文档、开发软件、处理图像或托管网站。发行版默认包含哪些应用,取决于其定位和安装时选择的选项。

传统 Linux 发行版通常以软件包的形式提供软件。一个软件包包含程序文件和相关元数据,例如软件名称、版本和依赖关系,也可能包含安装脚本或服务定义。

依赖关系表示软件需要哪些其他组件。例如,一个应用程序可能依赖某个共享库,因此安装这个应用时,还需要安装相应的库软件包。

软件仓库是经过维护的软件包及其元数据来源。发行版通过仓库提供为自身系统准备的软件,包管理工具则利用这些信息管理安装和组件之间的依赖关系。

软件包的来源同样重要。官方仓库和第三方仓库由不同的维护者负责,其维护方式和信任基础可能不同。签名机制可以帮助验证软件包或仓库信息的来源与完整性,但有效签名并不能保证软件一定无害。用户仍然需要判断软件来源是否可信。

第七章:包管理器究竟做什么?

包管理器记录软件的安装状态,并协调安装、升级和卸载。它利用软件包元数据识别依赖关系,选择能够满足要求的软件包组合。

Debian 和 Ubuntu 使用 APT,并配合底层的 dpkg 工具。Fedora 和常规安装的红帽企业 Linux 使用 DNF 和 RPM。Arch Linux 使用 pacman。多个发行版可以使用相同的包管理工具,同时维护不同的软件仓库和更新策略。

在 Ubuntu 中,apt show bash 可以显示 Bash 软件包的信息,例如版本、说明和依赖关系。这是一条查询命令,不会安装或升级 Bash。apt list –installed 则用于列出已安装的软件包。

日常维护中,sudo apt update 和 sudo apt upgrade 的作用需要明确区分。sudo apt update 刷新本地软件包索引,让系统知道仓库中有哪些可用版本,但不会因此安装这些升级。sudo apt upgrade 则按照该操作的规则,对已安装的软件包应用可用升级。

包管理覆盖的不只是浏览器和编辑器等应用程序。库、后台服务,甚至内核,都可以通过发行版的软件管理机制安装和更新。因此,包管理器也是维护整个系统的重要工具。

第八章:现代应用交付与系统更新

传统软件包仍然重要,但现代 Linux 系统可以同时使用多种软件交付方式。

Flatpak 提供跨发行版的应用分发框架。应用可以使用共享运行时,并包含额外依赖,从而减少对宿主发行版特定库版本的依赖。Flatpak 还提供沙箱机制,不过应用实际能够访问哪些资源,取决于它获得的权限。

Snap 是另一种软件打包和交付系统。AppImage 则通常把应用程序及部分依赖组合到一个可以运行的文件中。不同方式有不同的管理和运行机制,但都仍然依赖底层操作系统提供内核及必要的系统基础设施。

一些系统还通过协调好的部署来更新基础操作系统,而不只是逐个修改正在使用的软件包。Fedora Atomic Desktops,也就是 Fedora 原子桌面系列,提供了系统部署和回滚机制的例子。回滚到先前的系统部署,并不等于恢复所有个人文件和应用数据。

理解这些技术时,应区分“应用如何交付”与“基础操作系统如何更新”。它们相互关联,但解决的是不同的问题。

第九章:发行版之间有什么不同?

发行版之间的差异远不止桌面外观。软件版本、默认配置、测试流程、安全策略、安装方式、更新节奏和支持安排,都可能不同。

固定版本发行版围绕一个个命名版本组织开发。滚动更新发行版则持续提供更新,让系统沿着同一条更新路线不断演进。长期支持版本强调较长的维护周期,但具体支持范围可能因软件包和支持方案而异。长期支持是一种维护安排,可以与固定版本发布模式结合。

软件版本号较旧,并不自动意味着缺少安全修复。维护者可以把较新代码中的修复回补到受支持的旧版本中,在尽量保持兼容性的同时解决安全问题。因此,判断软件是否得到维护,不能只看版本号大小。

硬件支持也依赖多个组件共同工作,包括内核、固件、图形驱动和用户空间软件。文档质量、社区帮助、商业支持以及生命周期承诺,同样会影响实际使用体验。

选择发行版,既是在选择一套软件,也是在选择这套软件今后如何获得更新、支持和维护。

第十章:使用 Linux 发行版的好处

Linux 发行版让一个灵活的操作系统更容易安装、使用和维护。它的价值既来自所包含的软件,也来自维护者让这些组件持续协同工作的投入。

许多发行版不需要支付购买费用,其中的开源组件可以按照各自的许可证查看、修改和重新分发。不过,商业支持、订阅服务和部分软件可能具有单独的条款或费用。

用户可以选择桌面环境,只安装需要的服务,并把系统配置成日常电脑、开发工作站或服务器。合适的轻量配置也可能降低资源占用,让部分旧电脑继续发挥作用,但实际效果仍取决于硬件支持和应用需求。

对于开发者,软件仓库提供了获取编译器、解释器、编辑器和调试工具的方便渠道。这些工具不一定默认安装,但通常能够通过软件管理机制获取。

安全性和可靠性需要持续维护。权限控制、安全更新和经过测试的软件包提供重要基础,合理的配置与管理同样不可缺少。选择仍受支持、更新策略适合自身需求的发行版,有助于建立更加可预期的工作环境。

第十一章:在自己的系统上检查这些组件

通过几条只读命令,可以把前面的概念与实际系统联系起来。这些命令查询现有信息,不需要安装新软件或修改系统配置。

首先运行 cat /etc/os-release,查看发行版名称和版本。输出中的 PRETTY_NAME、NAME 或 VERSION 等字段,可以帮助识别当前发行版的用户空间环境。

接着运行 uname -r,查看正在运行的内核版本。发行版版本与内核版本分别标识不同的组件,不需要相同,也不能相互替代。

运行 ps -p 1 -o comm=,可以查看当前环境中 PID 为 1 的进程名称。在典型的 systemd 系统中,结果会显示 systemd;其他环境则可能出现不同的名称。

在 Ubuntu 中,apt show bash 可以查看 Bash 软件包信息。运行 ls –version,则可以了解当前 ls 命令的具体实现。输出可能显示 GNU Coreutils,也可能显示 uutils 等其他实现。熟悉的命令名称,并不意味着底层一定采用同一份程序。

解释这些结果时,还需要考虑运行环境。Linux 容器通常共享宿主的 Linux 内核,因此容器中的发行版信息与内核信息可能来自不同层次。Ubuntu 在 WSL 2 中运行时,使用的是通过 WSL 提供的 Linux 内核,其启动和服务管理行为也与配置有关。

不同的输出可能反映不同的组件选择或运行环境,并不一定说明系统存在问题。

结论

Linux 发行版把许多独立项目的软件整合起来,形成一个可以安装、使用和持续维护的操作系统。

内核管理资源并提供重要的系统接口;库、Shell 和工具支持程序与命令行操作;启动组件和后台服务让系统进入工作状态;桌面提供图形工作空间,应用程序则完成具体任务。

软件包、仓库和更新机制帮助这些组件保持协调。发行版维护者负责选择、组装、配置、测试和支持它们,让用户能够在统一的系统中使用来自不同项目的软件。

理解这些角色之后,Ubuntu、Debian、Fedora 和 Arch Linux 之间的关系就更加清楚了:它们共享 Linux 内核这一基础,同时对周围的软件组成和维护方式作出不同选择。

Posted in 家庭生活