Linux软件包管理概述

我们知道计算器如果没有安装任何操作系统,它就是一堆没用的电子器件;安装了操作系统,但是没有安装应用软件,那也是花瓶一只。因此我们要学会把这只“花瓶”变成能够为我们使用的机器,就必须要学会软件的安装。在Windows系统中,安装软件很简单,绝大部分情况运行安装包,然后几步”next”就能完成软件的安装,但是在Linux系统中,软件包的安装和管理远比Winodws的要复杂得多。

Linux下的软件包有两种,分别是源码包和二进制包。

Linux源码包

源码包到底是什么呢?源码包就是一大堆源代码程序,是由软件工程师使用特定的格式和语法所书写的代码,是人写的计算机语言的指令。我们都知道,计算机只能识别机器语言,也就是二进制语言,所以源码包的安装,就需要一个中间角色把代码语言”abcdedg”翻译成二进制语,这个中间角色我们称它为“编译器”。“编译”指的是从源代码到直接被计算机(或虚拟机)执行的目标代码的翻译过程,编译器的功能就是把源代码翻译为二进制代码,让计算机识别并运行。

由于源码包的安装需要把源代码编译为二进制代码,因此安装时间较长。比如,我们在windows系统下安装一个几十兆的软件,可能几分钟就按照完成了,因为它不需要经过编译过程所以安装很快。但是在Linux系统中如果我们以源码包的安装方式安装一个压缩包仅有二三十兆的软件,可能也需要花费十几分钟到几时分钟不等。而且在安装过程中,如果遇到了什么错误,对于初学者来说都很难弄解决,安装难以继续下去。因此为了解决使用源码包安装方式的这些问题,Linux 软件包的安装出现了使用二进制包的安装方式。

Linux二进制包

何为二进制包?二进制包也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快,且安装过程报错几率大大减小。二进制包是 Linux 下的默认安装软件包,所以有时我们也把二进制包称作默认安装软件包。

目前主要有以下 2 大主流的二进制包管理系统:

  • RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
  • DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。

因为我用的CentOS系统,因此后面讲解就是以RPM二进制包为主。

源码包 PK 二进制包

源码包一般包含多个文件的集合,出于发行的需要,一般会把源码包打包压缩之后发布,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为Tarball。而且源码包需要我们自己去软件的官方站点下载,源码包的结构一般如下:

  • 源代码相关文件
  • 配置和检测程序,如config等
  • 软件安装说明和软件说明,如README

源码包优点:

  • 开源,如果有足够的能力,可以修改源代码
  • 可以自由选择所需的功能
  • 软件是编译安装,所以更加适合自己的系统,更加稳定、效率更高
  • 卸载方便

源码包缺点:

  • 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
  • 编译过程时间较长,安装比二进制安装时间长
  • 因为是编译安装,安装过程中一旦报错新手很难解决

在前面已经讲过,二进制包是在软件发布的时候已经进行过编译的软件包,所以安装速度比源码包快得多。但是因为已经进行通译,大家也就不能在看到软件的源代码了。目前两大主流的二进制包系统是 DPKG 包和 RPM 包。

RPM包的优点如下:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载
  • 安装速度比源码包安装快得多

RPM包的缺点如下:

  • 经过编译,不能在看到源代码
  • 功能选择不如源码包灵活
  • 依赖性强。比如在安装软件包 a 时需要先安装 b 和 c,而在安装 b 时需要先安装 d 和 e。这就需要先安装 d 和 e,再安装 b 和 c,最后才能安装 a
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

RPM 包的缺点:比如在安装软件包 a 时需要先安装 b 和 c

这个源码包安装也会碰到类似的问题吧,窃以为不能算缺点。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!