『学了就忘』Linux软件包管理 — 40、Linux系统软件包介绍
1、Linux系统软件包分类
Linux系统下的软件包只有源码包和二进制包,就这两种包。
Tips:
- Windows系统中的软件和Linux系统的软件是不通用的。
- Windows系统中的软件是经过编译后的
.exe文件和.msi。
2、源码包说明
(1)什么是源码包
以前我们一直在说,Linux系统飞速发展的一个根本原因就是开源。所谓的源码包,就是直接给你一个开放的源程序。也就是说作者写的时候是什么样,写完就直接给你,这就是源码包。
Linux系统中最早的程序都是这样的源码包。
(2)源码包的优点
- 开源,如果有足够的能力,可以修改源代码(有利于学习,有利于推广)。
- 可以自由选择所需的功能。
- 软件是编译安装(编译:把
abcd翻译成0101的过程),所以更加适合自己的系统,更加稳定也效率更高(之前有一个大概的估算,如果使用源码包安装软件,要比使用同版本同样性能的二进制包,软件的效能要高5个百分点)。 - 卸载方便(直接把安装目录删除就可以了,基本上没有残余文件)。
(3)源码包的缺点
- 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误。
- 编译过程时间较长,安装比二进制安装时间长。
- 因为是编译安装,编译安装过程容易报错,一旦报错新手很难解决。
3、二进制包说明
类似于Windows系统的.exe文件。二进制包安装较源码包安装更为方便,但是二进制包就不在是开源的了,因为二进制包中是已经编译好的文件。
二进制包分类:
- DPKG包:是由Debian Linux所开发出来的包管理机制。通过DPKG包,Debian Linux就可以进行软件包管理。主要应用在Debian和Unbuntu中。(也经常叫deb包)
- RPM包:是由Red Hat公司所开发的包管理系统。功能强大,安装、升级、查询和卸载都非常简单和方便。目前很多Linux都在使用这种包管理方式,包括Fedora、CentoS、SuSE等。我们将要学习RPM包管理系统。
提示:
- DPKG包和RPM包,这两种包系统是不通用的。这也是两个系统最大的区别。
- 但是Red Hat中的安装过程和Debian中软件的安装是一一对应的。如果以后用到Debian系统,查阅一下与之对应的命令即可。
4、RPM包的优缺点
(1)RPM包的优点:
- 包管理系统操作简单,只通过几个命令就可以实现包的安装、升级、查询和卸载。(编辑过程基本不会报错了,因为厂商已经提前编译好了)
- 安装速度比源码包安装快的多。
(2)RPM包的缺点:
- 经过编译,不再可以看到源代码。
- 功能选择不如源码包灵活。
- 依赖性。有时我们会发现需要安装软件包
a时需要先安装软件b和c,而安装b软件时需要安装软件d和e。这时需要先安装d和e,再安装b和c,最后才能安装a包。所以通过RPM包安装软件,如果软件有依赖性的话,软件则是有一定的安装顺序的。如果依赖性非常强的话,会非常的繁琐。(Linux系统中绝大多数软件包都会有依赖的软件包)
(3)注意
注意:这里多强调一下上边的依赖性。
依赖性分为:
- 树形依赖
a—>b—>c
a包依赖b包,b包依赖c包。所以需要先安装c包,在安装b包,最后在安装c包。 - 环形依赖
a—>b—>c—>a
这种环形的依赖关系,按照上边树形依赖的解释,是无法安装的。但是这种依赖关系解决起来很简单,就是把a、b、c包同时安装,就是用一条命令同时安装三个包就能解决。 - 模块依赖(函数库依赖)
最烦麻烦就是这种模块依赖关系,我们举一个例子,尝试安装以下文件:
[root@localhost Packages]# rpm -ivh mysql-connector-odbc-5.2.5-7.e17.x86_64.rpm
错误:依赖检测失败:
libodbc.so.2()(64bit)被mysql-connector-odbc-5.2.5-7.e17.x86_64需要
libodbcinst.so.2()(64bit)被mysql-connector-odbc-5.2.5-7.el7.x86_64需要
# 注意:
libodbc.so.2是一个文件的名字,并不是一个包名,你要把这个文件所在的包安装上,这个文件就存在了。
发现报错,需要安装libodbc.so.2函数库文件,这时会发现在光盘中根本找不到这个文件。那是因为这个函数库没有单独成包,是包含在某一个软件包中的。而如果要知道该文件在哪个软件包中,需要查询网站http://www.rpmfind.net/(很方便)。
如下图:

点击搜索之后,会显示在不同的Linux版本中,安装哪个包,如下图:

这是个网站的原理,是通过查询一个RPM包依赖管理的数据库,来解决这个问题的。
4、RPM包的两种安装方法
- 手动(手工命令安装):就是通过
rpm命令手动进行安装,自己解决包之间的依赖性。 yum在线安装:yum命令会自动连接到Red Hat的官方服务器上的包依赖数据库,不管何种依赖关系,需要的包都会自动的下载到本地,然后在自动进行安装。
注意:
- 如果是正版的
Red Hat系列的Linux系统,会收费,但是CentOS里的yum是免费的。- 还有要注意一点Linux系统中,二进制包、RPM包、默认安装包都指的是二进制包。
yum只是源码包和二进制包的在线安装方式。
5、总结
软件既有源码包版本,又有RPM包版本,如何选择?
建议:
- 源码包:如果服务是给大量客户端提供访问的,建议使用源码包,使用源码包安装效率更高(如搭建LAMP环境)。
- RPM包:如果程序是给少量用户访问,或者本地使用的,建议RPM包,因为RPM管理方便。
『学了就忘』Linux软件包管理 — 40、Linux系统软件包介绍的更多相关文章
- 『学了就忘』vim编辑器基础 — 94、vim编辑器介绍
目录 1.vim编辑器简介 2.vim的工作模式 (1)命令模式 (2)输入模式 (3)最后行模式(末行模式) 1.vim编辑器简介 vim是一个全屏幕纯文本(绘个表格或者插个图片就不要想了)编辑器, ...
- 『学了就忘』Linux软件包管理 — 42、对RPM软件包的查询操作
目录 1.查询RPM软件包是否安装 2.查询系统中所有已安装的RPM软件包 3.查询RPM软件包的详细信息 4.查询RPM软件包中的文件列表 5.查询系统文件属于哪个RPM包 6.查询RPM软件包所依 ...
- 『学了就忘』Linux软件包管理 — 47、Linux源码包的安装和卸载
目录 1.源码包安装服务的注意事项 2.源码包安装服务的过程 3.源码包安装服务的删除 4.源码包安装服务的启动 5.源码包安装服务的关闭 1.源码包安装服务的注意事项 (1)安装服务选择哪种软件包? ...
- 『学了就忘』Linux基础 — 6、VMware虚拟机安装Linux系统(超详细)
目录 1.打开VMware虚拟机软件 2.选择Linux系统的ISO安装镜像 3.开启虚拟机安装系统 (1)进入Linux系统安装界面 (2)硬件检测 (3)检测光盘 (4)欢迎界面 (5)选择语言 ...
- 『学了就忘』Linux基础 — 15、了解Linux系统的目录结构
目录 1.一级目录说明 (1)一级目录列表 (2)/bin/和/sbin/目录说明 (3)/boot/目录说明 (4)/lib/和/lib64/目录说明 (5)/lost+found/目录说明 (6) ...
- 『学了就忘』Linux基础 — 16、Linux系统与Windows系统的不同
目录 1.Linux严格区分大小写 2.Linux一切皆文件 3.Linux不靠扩展名区分文件类型 4.Linux中所有的存储设备都必须在挂载之后才能使用 5.Windows下的程序不能直接在Linu ...
- 『学了就忘』Linux服务管理 — 77、RPM包安装基于xinetd的服务的管理
目录 1.基于xinetd服务的启动管理 (1)telnet服务安装 (2)telnet服务启动 2.基于xientd服务的自启动管理 现在Linux系统中基于xinetd的服务越来越少了,但Linu ...
- 『学了就忘』Linux基础 — 1、UNIX系统介绍
目录 (一)UNIX系统介绍 1.UNIX系统发展历史 2.UNIX 主要发行版本 (二)GNU计划 1.GNU计划介绍 2.为何Stallman会发起这个GNU计划呢? 3.GNU的通用公共许可证: ...
- 『学了就忘』Linux基础 — 11、通过setup工具配置Linux系统IP地址
目录 1.setup命令介绍 2.使用setup命令配置IP (1)执行setup命令 (2)进入图形化配置界面 (3)选择配置IP还是DNS (4)选择要配置的网卡 (5)进入IP地址配置页面 (6 ...
随机推荐
- 牛客挑战赛48E-速度即转发【带修莫队,分块】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11161/E 题目大意 给出\(n\)个数字的一个序列,\(m\)个操作. 给出\(l,r,k\),求一个最大 ...
- Redis之品鉴之旅(五)
Redis事务 原子性:就是最小的单位 一致性:好多命令,要么全部执行成功,要么全部执行失败 隔离性:一个会话和另一个会话之间是互相隔离的 持久性:执行了就执行了,数据保存在硬盘上 典型例子:银行转账 ...
- Python日常Bug集
1.TypeError: 'int' object is not iterable: 场景示例: data = 7 for i in data: print(i) # 原因:直接对int数据进行迭代造 ...
- spring-data-redis 上百万的 QPS 压力太大连接失败,我 TM 人傻了
大家好,我们最近业务量暴涨,导致我最近一直 TM 人傻了.前几天晚上,发现由于业务压力激增,某个核心微服务新扩容起来的几个实例,在不同程度上,出现了 Redis 连接失败的异常: org.spring ...
- Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- NOIP 模拟六 考试总结
T1辣鸡 T1就搞得这莫不愉快.. 大致题意是给你几个矩形,矩形覆盖的点都标记上,每个矩形无重复部分,求满足(x,y) (x+1,y+1)都标记过的点对数,范围1e9. 看起来很牛的样子,我确实也被1 ...
- 5.java内存模型详细解析
一. java结构体系 Description of Java Conceptual Diagram(java结构) 我们经常说到JVM调优,JVM和JDK到底什么关系,大家知道么?这是java基础. ...
- 2021年1月-第02阶段-前端基础-HTML+CSS进阶-VS Code 软件
软件安装 VSCode软件 能够安装 VS Code 能够熟练使用 VS Code 软件 能够安装 VS Code 最常用的插件 1. VS Code简介 1.1 VS Code 简介 Visual ...
- 半天撸一个简易版mybatis
为什么需要持久层框架? 首先我们先看看使用原生jdbc存在的问题? public static void main(String[] args) { Connection connection = n ...
- SharkCTF2021 BabyGame
web类题. 访问题给页面,页面里没啥信息.抓包,发现: 访问它,发现是一个游戏. F12之后看调试器里的js代码,发现: console.log("balabalabala"); ...