当前位置: 首页 > news >正文

Linux软件包(源码包和二进制包)

Linux下的软件包众多,且几乎都是经 GPL 授权、免费开源(无偿公开源代码)的。这意味着如果你具备修改软件源代码的能力,只要你愿意,可以随意修改。

GPL,全称 General Public License,中文名称“通用性公开许可证”,简单理解 GPL 就是一个保护软件自由的一个协议,经 GPL 协议授权的软件必须开源,请猛击《开源协议》了解更多信息。

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

Linux源码包

实际上,源码包就是一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。

我们都知道,计算机只能识别机器语言,也就是二进制语言,所以源码包的安装需要一名“翻译官”将“abcd”翻译成二进制语言,这名“翻译官”通常被称为编译器。

“编译”指的是从源代码到直接被计算机(或虚拟机)执行的目标代码的翻译过程,编译器的功能就是把源代码翻译为二进制代码,让计算机识别并运行,读者可以猛击《C语言编译器》了解更多信息。

虽然源码包免费开源,但用户不会编程怎么办?一大堆源代码程序不会使用怎么办?源码包容易安装吗?等等这些都是使用源码包安装方式无法解答的问题。

另外,由于源码包的安装需要把源代码编译为二进制代码,因此安装时间较长。比如,大家应该都在 Windows下安装过 QQ,QQ 功能较多,程序相对较大(有 70 MB左右),但由于其并非是以源码包的形式发布,而是编译后才发布的,因此只需几分钟(经过简单的配置)即可安装成功。

但如果我们以源码包安装的方式在 Linux 中安装一个 MySQL 数据库,即便此软件的压缩包仅有 23 MB左右,也需要 30 分钟左右的时间(根据硬件配置不同,略有差异)。

通过对比你会发现,源码包的编译是很费时间的,况且绝多大数用户并不熟悉程序语言,在安装过程中我们只能祈祷程序不要报错,否则初学者很难解决。为了解决使用源码包安装方式的这些问题,Linux 软件包的安装出现了使用二进制包的安装方式。

Linux二进制包

二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小。

二进制包是 Linux 下默认的软件安装包,因此二进制包又被称为默认安装软件包。目前主要有以下 2 大主流的二进制包管理系统:

  • RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。

  • DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。

RPM 包管理系统和 DPKG 管理系统的原理和形式大同小异,可以触类旁通。由于本教程使用的是 CentOS 6.x 版本,因此本节主要讲解 RPM 二进制包。

源码包 VS RPM二进制包

源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。

Tarball 是 Linux 系统的一款打包工具,可以对源码包进行打包压缩处理,人们习惯上将最终得到的打包压缩文件称为 Tarball 文件。

源码包需要我们自己去软件官方网站进行下载,包中通常包含以下内容:

  • 源代码文件。

  • 配置和检测程序(如 configure 或 config 等)。

  • 软件安装说明和软件说明(如 INSTALL 或 README)。

总的来说,使用源码包安装软件具有以下几点好处:

  • 开源。如果你有足够的能力,则可以修改源代码。

  • 可以自由选择所需的功能。

  • 因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。

  • 卸载方便。

但同时,使用源码包安装软件也有几点不足:

  • 安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。

  • 编译时间较长,所以安装时间比二进制安装要长。

  • 因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决。

相比源码包,二进制包是在软件发布时已经进行过编译的软件包,所以安装速度比源码包快得多(和 Windows 下软件安装速度相当)。

也正是因为已经进行通译,大家无法看到软件的源代码。使用 RMP 包安装软件具有以下 2 点好处:

  1. 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载。

  2. 安装速度比源码包安装快得多。

与此同时,使用 RMP 包安装软件有如下不足:

  • 经过编译,不能在看到源代码。

  • 功能选择不如源码包灵活。

  • 依赖性。有时我们会发现,在安装软件包 a 时需要先安装 b 和 c,而在安装 b 时需要先安装 d 和 e。这就需要先安装 d 和 e,再安装 b 和 c,最后才能安装 a。比如,我买了一个漂亮的灯具,打算安装在客厅里,可是在安装灯具之前,客厅需要有顶棚,并且顶棚需要刷好油漆。安装软件和装修及其类似,需要有一定的顺序,但是有时依赖性会非常强。

如何选择

通过源码包和 RMP 二进制包的对比,在 Linux 进行软件安装时,我们应该使用哪种软件包呢?

为了更好的区别两种软件包,这里举个例子。假设我们想做一套家具,源码包就像所有的家具完全由自己动手手工打造(手工编译),想要什么样的板材、油漆、颜色和样式都由自己决定(功能自定义,甚至可以修改源代码)。想想就觉得爽,完全不用被黑心的厂商所左右,而且不用担心质量问题(软件更适合自己的系统,效率更高,更加稳定)。但是,所花费的时间大大超过了买一套家具的时间(编译浪费时间),而且自己真的有做木工这个能力吗(需要对源代码非常了解)?就算请别人定制好的家具,再由自己组装,万一哪个部件不匹配(报错很难解决),怎么办?

那么二进制包呢?也是我们需要一套家具,去商场买了一套(安装简单),家具都是现成的,不会有哪个部件不匹配,除非因为自身问题没有量好尺寸而导致放不下(报错很少)。但是我们完全不知道这套家具用的是什么材料、油漆是否合格,而且家具的样式不能随意选择(软件基本不能自定义功能)。

通过以上对源码包和二进制包的讲解,相信大家对两者的区别和特点有了更清楚的认识。

相关文章:

Linux软件包(源码包和二进制包)

Linux下的软件包众多,且几乎都是经 GPL 授权、免费开源(无偿公开源代码)的。这意味着如果你具备修改软件源代码的能力,只要你愿意,可以随意修改。 GPL,全称 General Public License,中文名称“通…...

Leetcode-394 字符串解码(不会,复习)

此题不会!!!!!!!!!!!! 题解思路:元组思想:数字[字符串],每次遇到中括号意味着要重复数字次字符串…...

如何在Linux上搭建本地Docker Registry并实现远程连接

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…...

assets_common.min.js

assets_common.min.js odoo将零散的js文件主要打包成了两个文件,分别是web.assets_common.min.js 和web.assets_backend.min.js, 我们分别看看这两个文件里都有些啥? common.js最先加载,看看里面都有些啥 1、boot.js 定义了od…...

前端工程化(vue2)

一、环境准备 1.依赖环境:NodeJS 官网:Node.js 2.脚手架:Vue-cli 参考网址:安装 | Vue CLI 介绍:Vue-cli用于快速的生成一个Vue的项目模板。主要功能有:统一的目录结构,本地调试&#xff0…...

深度学习(生成式模型)——Classifier Guidance Diffusion

文章目录 前言问题建模条件扩散模型的前向过程条件扩散模型的反向过程条件扩散模型的训练目标 前言 几乎所有的生成式模型,发展到后期都需要引入"控制"的概念,可控制的生成式模型才能更好应用于实际场景。本文将总结《Diffusion Models Beat …...

Hadoop架构、Hive相关知识点及Hive执行流程

Hadoop架构 Hadoop由三大部分组成:HDFS、MapReduce、yarn HDFS:负责数据的存储 其中包括: namenode:主节点,用来分配任务给从节点 secondarynamenode:副节点,辅助主节点 datanode:从节点&#x…...

P1529 [USACO2.4] 回家 Bessie Come Home 题解

文章目录 题目描述输入格式输出格式样例样例输入样例输出 提示完整代码 题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中。 Farmer John 按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数…...

Python语法基础(条件语句 循环语句 函数 切片及索引)

目录 条件语句关键字与C对照注意 循环语句while 循环语句while else 循环语句for 循环语句range() 函数 for else 循环语句循环控制语句练习:打印乘法表 函数函数定义及调用函数值传递和引用传递多返回值参数类型位置参数默认参数关键字参数可变数量的参数可变数量的…...

Debian 9 Stretch APT问题

Debian 9 Stretch APT问题 flyfish 操作系统 Debian 9 Stretch 错误提示 使用sudo apt update错误提示 Ign:1 http://mirrors.aliyun.com/debian stretch InRelease Ign:2 http://mirrors.aliyun.com/debian-security stretch/updates InRelease Ign:3 http://mirrors.al…...

遍历List集合和Map进行修改和删除报java.util.ConcurrentModificationException错误详解

一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素或新增),可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…...

Android从一个APP跳转到另外一个APP

1、从当前APP去全新启动另外一个目标APP(非覆盖同一个进程): 启动另外一个目标APP(非覆盖原来APP的方式) 1、当前APP加入获取权限声明:(不加人权限检查,没法启动目标app&#xff0…...

我的创作纪念日——创作者2年

机缘 我最初使用CSDN估计是在2014年左右,当时还在读研,除了在当时比较有名的BBS例如小木虫上进行学术交流外,我发现很多问题百度后,都会转到CSDN,而且文章内容颇为专业,很多问题也都有专业的回答&#xff…...

大数据之LibrA数据库系统告警处理(ALM-12032 ommdba用户或密码即将过期)

告警解释 系统每天零点开始,每8小时检测当前系统中ommdba用户和密码是否过期,如果用户或密码即将在15天内过期,则发送告警。 当系统中ommdba用户过期的期限修改或密码重置,告警恢复。 告警属性 告警ID 告警级别 可自动清除 …...

C_3练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.下列叙述中正确的是()。 A.用C程序实现的算法必须要有输入和输出操作 B.用C程序实现的…...

CentOS7 安装Jenkins 2.414.3 详细教程

目录 1、前提条件硬件软件-java11安装 2、安装jenkins3、启动jenkins配置用户和用户组配置JAVA_HOME 4、配置Jenkins一直处于启动状态5、测试Jenkins是否可以访问以及配置6、访问Jenkins系统 1、前提条件 硬件 内存 4G ; 硬盘 20G 软件-java11安装 上传文件jdk-11.0.21_lin…...

chatglm3-6b记录问答对

# 打开文件,第二个参数是打开文件的模式,a代表追加,也就是说,打开这个文件之后直接定位到文件的末尾 file open(chatlog.txt, "a") # 写入数据 file.write(ask:prompt_text\n) file.write(response:response\n) # 关闭文件 fil…...

k8s ingress 代理 mysql 3306端口

helm 安装 ingress-nginx helm upgrade --install ingress-nginx ingress-nginx \--repo https://kubernetes.github.io/ingress-nginx \--namespace ingress-nginx --create-namespace执行命令 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-ngin…...

Informix管理共享内存

1、查看共享内存使用情况 [informixREHL4 ~]$ onstat -g seg IBM Informix Dynamic Server Version 11.50.UC4 -- On-Line -- Up 00:38:21 -- 144144 Kbytes Segment Summary: id key addr size ovhd class blkused blkfree 393226 …...

Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?

说说webpack中常见的Plugin?解决了什么问题?- 题目详情 - 前端面试题宝典 1、plugin 的作用 Plugin 是一种计算机应用程序,它和主应用程序互相交互,以提供特定的功能。 是一种遵循一定规范的应用程序接口编写出来的程序&#…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...