Linux软件包(源码包和二进制包)及其区别和特点
Linux 下的软件包众多,而且几乎都是经 GPL 授权的,也就是说这些软件都免费,振奋人心吧?而且更棒的是,这些软件几乎都提供源代码(开源的),只要你愿意,就可以修改程序源代码,以符合个人的需求和习惯。当然,你要具备修改这些软件的能力才可以。
源码包到底是什么呢?其实就是软件工程师使用特定的格式和语法所书写的文本代码,是人写的计算机语言的指令,一般由英文单词组成。是不是有点晕?
其实源代码程序是程序员写的计算机指令,符合特定的格式和语法。那么,众所周知,计算机可以识别的是机器语言,也就是二进制语言,所以需要一名翻译官把abed翻译成二进制机器语言。我们一般把这名翻译官称为编译器,它的作用就是把人能够识别的 abcd 翻译成二进制机器语言,让计算机可以识别并执行。
源码包不用担心收费问题,但是我并不会 C 语言怎么办?那一大堆的源代码程序到底如何使用呢?这个源码包容易安装吗?源码包的安装因为要把源代码编译为二进制语言,所以安装的时间较长。比如,在 Windows 下大家可能安装过 QQ,现在的 QQ 功能较多,程序相对较大,大概有 60 MB,但由于 QQ 并不是以源代码形式发布的,而是经过编译之后发布的,所以只需要几分钟并经过简单的配置就可以安装成功。安装时间较短(当然功能也基本不能自定义)。
在 Linux 中安装一个 MySQL 数据库,这个数据库的压缩包大概有 23 MB,需要多长时间呢?答案是 30 分钟左右(根据计算机硬件配置不同)。这样看来编译还是很浪费时间的,而且绝大多数用户并不熟悉写程序的语言,所以我们要祈祷程序不要报错,否则对初学者来讲很难解决。
为了解决源码包的这些问题,在 Linux 中就出现了二进制包,也就是源码包经过编译之后的包。这种包因为编译过程在发布之前已经完成,所以用户安装时速度较快(和 Windows 下安装软件速度相当),而且报错也大大减少。
二进制包是 Linux 下的默认安装软件包,所以有时我们也把二进制包称作默认安装软件包。目前主要有两个系列的二进制包管理系统:一个是 Red Hat 上的 RPM 包管理系统;另一个是 Debian 和 Ubuntu 上的 DPKG 包管理系统。本教程讲的是 Red Hat 公司的 CentOS Linux,所以我们主要讲解 RPM 包管理系统。不过这两个系列的二进制包管理的原理与形式大同小异,可以触类旁通。
说了这么多,到底源码包和二进制包哪个好呢?举个例子,我们想做一套家具,源码包就像所有的家具完全由自己动手手工打造(手工编译),想要什么样的板材、油漆、颜色和样式都由自己决定(功能自定义,甚至可以修改源代码)。想想就觉得爽,完全不用被黑心的厂商所左右,而且不用担心质量问题(软件更适合自己的系统,效率更高,更加稳定)。但是,所花费的时间大大超过了买一套家具的时间(编译浪费时间),而且我自己真的有做木工这个能力吗(需要对源代码非常了解)?就算请别人定制好的家具,再由我自己组装,万一哪个部件不匹配(报错很难解决),怎么办?
那么二进制包呢?也是我需要一套家具,可是我去商场买了一套(安装简单),家具都是现成的,不会有哪个部件不匹配,除非因为我没有量好尺寸而导致放不下(报错很少)。但是我完全不知道这套家具用的是什么材料、油漆是否合格,而且家具的样式不能随意选择(软件基本不能自定义功能)。
好了,通过这个例子大家可以了解源码包和二进制包之间的区别。
源码包的特点
源码包既然是软件包,就不会是一个文件,而是多个文件的集合。出于发行的需要,我们一般会把源码包打包压缩之后发布,而 Linux 中最常用的打包压缩格式是"Mar.gz",所以我们也把源码包叫作 Tarball。源码包需要大家自己去软件的官方网站进行下载。
源码包的压缩包中一般会包含如下内容:
源代码文件。
配置和检测程序(如configure或config等)。
软件安装说明和软件说明(如INSTALL或 README)。
源码包的优点如下:
开源。如果你有足够的能力,则可以修改源代码。
可以自由选择所需的功能。
因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。
卸载方便。
源码包的缺点如下:
安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。
编译时间较长,安装时间比二进制安装要长。
因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决。
二进制包的特点
二进制包是在软件发布的时候已经进行过编译的软件包,所以安装速度比源码包快得多(和 Windows 下软件安装速度相当)。但是因为已经进行通译,大家也就不能在看到软件的源代码了。目前两大主流的二进制包系统是 DPKG 包和 RPM 包。
DPKG 包是由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。
RPM 包是由 Red Hat 公司所开发的包管理系统,功能强大,安装、升级、査询和卸载非常简单方便。
目前很多 Linux 版本都在使用这种包管理方式,包括 Fedora、CentOS、SuSE 等。Linux 默认采用 RPM 包来安装系统,所以常用的 RPM 包都在安装光盘中。
RPM 包的优点如下:
包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载。
安装速度比源码包安装快得多。
RPM 包的缺点如下:
经过编译,不能在看到源代码。
功能选择不如源码包灵活。
依赖性。有时我们会发现,在安装软件包 a 时需要先安装 b 和 c,而在安装 b 时需要先安装 d 和 e。这就需要先安装 d 和 e,再安装 b 和 c,最后才能安装 a。比如,我买了一个漂亮的灯具,打算安装在客厅里,可是在安装灯具之前,客厅需要有顶棚,并且顶棚需要刷好油漆。安装软件和装修及其类似,需要有一定的顺序,但是有时依赖性会非常强。
看到里,我们发现GNU/Linux不同发行版之间有着不同的二进制包格式,为什么linux发行版之间不能有一个统一的二进制软件包标准?
转载自:https://blog.csdn.net/zyy1659949090/article/details/88123264
Linux软件包(源码包和二进制包)及其区别和特点的更多相关文章
- Linux MySQL源码安装缺少ncurses-devel包
在Red Hat Enterprise Linux Server release 5.7 上用源码安装MySQL-5.6.23时,遇到了" remove CMakeCache.txt and ...
- 【JDK】Linux安装源码包JDK完整步骤
[JDK]Linux安装源码包JDK完整步骤 1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version ...
- Spark1.0.0 源码编译和部署包生成
问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...
- Linux 的源码安装工具 CheckInstall
Linux 的源码安装工具 CheckInstall Checkinstall 是一个能从 tar.gz 类的 https://www.ibm.com/developerworks/cn/linux/ ...
- linux内存源码分析 - 内存回收(整体流程)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 当linux系统内存压力就大时,就会对系统的每个压力大的zone进程内存回收,内存回收主要是针对匿名页和文 ...
- (转)linux内存源码分析 - 内存回收(整体流程)
http://www.cnblogs.com/tolimit/p/5435068.html------------linux内存源码分析 - 内存回收(整体流程) 概述 当linux系统内存压力就大时 ...
- linux下源码安装netcat
linux下源码安装netcat http://blog.chinaunix.net/uid-20783755-id-4211230.html 1,下载netcat源码,netcat-0.7.1-13 ...
- linux 手动源码安装lnmp(亲测)
linux 手动源码安装lnmp笔记(亲测)<pre>先安装这2个yum install gccyum install g++</pre><pre>先在linux ...
- Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这 ...
随机推荐
- Qt编写气体安全管理系统4-通信协议
一.前言 通信协议解析是整个系统的核心灵魂,绝大部分人做软硬件通信开发,第一步估计就是写demo将协议解析好,然后再慢慢写整个界面和操作流程等,在工业控制领域,modbus协议应用还是非常广泛的,这个 ...
- easyui前台改变datagrid某单元格的值
有时候前台完成某个操作后要修改datagrid的值, 也许这个datagrid是没有保存的, 所以要修改后才能传递到后台; 也许要其他操作过后才需请求后台; 这些情况都需要前台对datagrid的单元 ...
- python:动态参数*args
动态参数 顾名思义,动态参数就是传入的参数的个数是动态的,可以是1个.2个到任意个,还可以是0个.在不需要的时候,你完全可以忽略动态函数,不用给它传递任何值. Python的动态参数有两种,分别是*a ...
- AWS 数据传输加速(八)
AWS CloudFront 概述 一个CDN服务,加快网页和其它下载全球分布式网络缓存服务器 CloudFront通过全球性的边缘站点将内容缓存到世界各地实现CDN 在更邻近的位置提供更低的延迟,更 ...
- 继400G后,QSFP-DD800G会是下一个风口吗?
数据中心市场作为光通信企业的主要战场,近三年400G的热度一直都在持续,虽有Facebook F16继续选用100G架构给市场泼了一些冷水等插曲存在,但近日随着阿里巴巴硅光400G QSFP-DD D ...
- vs2015.无法运行rc.exe
1.参考文章:无法运行“rc.exe” - wb175208的专栏 - CSDN博客.html(https://blog.csdn.net/wb175208/article/details/83546 ...
- Django orm练习
ORM练习题 models生成 from django.db import models # Create your models here. # 书籍管理 class Book(models.Mod ...
- 烽火传递【单调队列优化dp】
题目大意: 1.给出长度为n的数组,要求每m个连续的元素之间必须选一个值作为代价,求该数组的最小代价. 题解思路: 1.显然是线性dp,dp[i]表示选择第 i 个元素时的最小总代价.很明显状态转移方 ...
- java的ReentrantLock类详解
ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制 ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系 类的定义 pub ...
- LeetCode 172. 阶乘后的零(Factorial Trailing Zeroes)
172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. LeetCode172. Factorial Trai ...