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,这 ...
随机推荐
- 123457123456#1#----com.MC.EnglishGame98--前拼后广--jp英语-mc
com.MC.EnglishGame98--前拼后广--jp英语-mc
- .Net MVC 标签页
目录 Bootstrap的标签页 适合.Net MVC的标签页 Bootstrap的标签页 下面是Bootstrap的标签页,挺好的,但是用的id,内容是固定的?我不知道怎么变成不同的视图来 < ...
- matplot中的对象
figure:图表,可以理解为一个空间,二维情况下是一个平面 axes:坐标系,空间中的坐标系,一个空间可以有多个坐标系 axis:坐标轴,坐标系中的一个坐标轴,一个坐标轴只属于一个坐标系 画点:sc ...
- idea里面lombok要如何设置后才会生效
16:31 Lombok Requires Annotation Processing Annotation processing seems to be disabled for the proje ...
- SQL网页端在线自定义查询工具
TreeSoft数据库管理系统,是用JAVA开发,基于网页的数据库SQL查询工具.功能包括:数据库的展示,库表的展示,表字段结构的展示,SQL语句的在 线编辑批量执行,表结构的在线设计维护,数据的在线 ...
- Nginx负载均衡-如何自定义URL中的hash key2
upstream backend1 { server 192.168.3.236:555; server 192.168.3.236:222; ...
- win7和Ubuntu16.04之间相互远程控制
一.在win7中远程控制ubuntu16.04 步骤: 在ubuntu中通过Desktop share打开允许远程访问 ubuntu中安装xrdp 由于xrdp与unity.gnome桌面不兼容,所以 ...
- Ordered Neurons: Integrating Tree Structures Into Recurrent Neural Networks
这是一篇发表在ICLR2019上的论文,并且还是ICLR2019的Best paper之一.该论文提出了能够学习树结构信息的ON-LSTM模型,这篇论文的开源代码可以在GitHub找到. 自然语言都是 ...
- linux 加载新的磁盘(卷组)
pvcreate /dev/vdbvgcreate datavg /dev/vdblvcreate -n datalv -L 99.8G datavgmkfs.ext3 /dev/datavg/dat ...
- 树莓派上跑.NET的segment fault错误
答案:树莓派1和树莓派zero是不支持的,原因是.net需要arm v7 详情看这里 可以用 cat /proc/cpuinfo | grep 'model name' |uniq 看一下cpu