[转帖]Linux学习笔记之rpm包管理功能全解
Linux学习笔记之rpm包管理功能全解
https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 其实感觉活学活用 非常有用处
0x00 软件包管理器
所有的软件都是由文件格式的程序代码(即源代码),经过编译成为一个可执行二进制文件;对于一个软件来说,其包含二进制程序、库文件、配置文件以及帮助文件。在应用中,每次要安装程序时通过找源代码然后去编译成二进制文件,这个过程要花费大量的时间,所以就有了程序包管理器。程序包管理器的功能是:将编译好的应用程序的各组文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。
我们可以将这种软件包管理器称为手动安装程序的软件包管理器,为什么成为手动安装程序的软件包管理器呢?
因为这种软件包管理器,在软件安装的过程中不能解决包之间的依赖管理,比如,A程序的运行要基于B程序的某些库文件才能运行,所以在安装A程序之前必须安装A程序;当然也有可能出现这种情况:B程序的运行也要基于A程序的某些库文件才能运行,这样就形成了先有鸡还是先有蛋的问题。
利用这种程序包管理器我们只能手动解决包之间的依赖关系。所谓自动解决依赖关系,无非就是在某个程序安装之前对该程序包文件进行分析看其都依赖哪些程序,然后将这些程序一并安装,从而解决软件包的依赖文件,我们将自动解决依赖关系的工具称为解决依赖关系的前端工具。
Linux发行版本主要分为两类:类RedHat和类Debain,不同的发行版本上所使用的程序包管理器各不相同,下图是各发行版本所使用的程序包管理器:

0x01 程序包管理器的组成
1、程序包的组成清单(每个程序包都单独实现)
其中包含文件清单和安全或卸载时运行的脚本
2、数据库(公共)
程序包管理器数据库存放的位置在/var/lib/rpm/目录下,其中包含程序包的名称和版本,依赖关系,功能说明以及安装生成的各文件的文件路径及校验码信息等等。
0x02 获取可靠安全程序包的途径
1、系统发行版的光盘或官方的文件服务器(或镜像站点)
http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com
2、项目的官方站点
详细直接参考官方网站
3、第三方组织:
(1) EPEL
(2) 专门搜索rpm的搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4、自己做rpm包
0x03 rpm包命名格式
在看rpm包命名格式之前先来看下源代码的命名格式:
源代码:name-VERSION.tar.gz
其中VERSION包含: major.minor.release
rpm包命名格式
name-VERSION-release.arch.rpm
VERSION: major.minor.release --> 其为源代码的发行号
release.arch: rpm包的发行号
architecture: i386, x64(amd64), ppc, noarch
redis-3.0.2-1.centos7.x64.rpm
拆包:主包和子包;Linux中的软件包一般有一个主程序的安装包,再就是子程序包,所谓的子程序包就是该软件上的某一功能的安装包,或者说是该程序的一个插件。
主包: name-VERSION-release.arch.rpm 子包: name-function-VERSION-release.arch.rpm
0x04 CentOS系统上rpm命令管理程序包
rpm程序包管理器主要实现的功能有:安装、升级、查询、校检以及数据库维护
- rpm命令格式
rpm [OPTIONS] [PACKAGE_FILE]
- 命令选项 [OPTIONS]
-i, --install: 安装
-U, -update, -F, --freshen: 升级
-e, --erase: 卸载
-q, --query: 查询
-V, --verify: 校验
--builddb, --initdb: 数据库的创建
1、安装
rpm {-i|--install} [install-options] PACKAGE_FILE ...
# rpm -ivh PACKAGE_FILE
GENERAL OPTIONS
-v: verbose,详细信息
-vv: 更详细的输出
[install-options]

-h: hash marks 输出进度条;每个#表示2%的进度;
--test: 测试安装,检查并报告依赖关系及冲突消息等;
--nodeps: 忽略依赖关系;
注意:当忽略依赖关系安装程序时,程序安装完成后,有可能不能正常运行,所以该安装选项不建议使用;
--replacepkgs: 重新安装;
比如说,将某程序的配置文件中信息修改后,想还原该配置文件,但是忘记了之前的配置,此时可以将该配置文件删除后,利用该安装选项对该程序重新安装来恢复其某个配置文件;
--nosignature: 不检查包签名信息,不检查包来源的合法性;
--nodigest: 不检查包完整性信息;
--noscripts: 安装时不执行脚本文件

注意:rpm可以自带脚本
rpm包中的脚本分四类: preinstall: 安装过程开始之前运行的脚本,%pre,--nopre postinstall: 安装过程完成之后运行的脚本,%post,--nopost preuninstall: 卸载过程真正开始执行之前运行的脚本,%preun,--nopreun postuninstall: 卸载过程完成之后运行的脚本,%postun,--nopostun
安装命令演示
(1) 安装一个rpm软件包

(2) 忽略依赖关系安装

安装php的rpm包时出现依赖关系错误,此时可以忽略依赖关系对软件包进行安装

(3) 测试安装


(4) 重新安装

2、升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U: 升级或安装 -F: 升级 rpm -Uvh PACKAGE_FILE... rpm -Fvh PACKAGE_FILE...
[install-options]
--oldpackage: 降级 --foece: 强制升级
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版内核; (2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
3、卸载
rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--allmarches: 卸载所有匹配指定名称的程序包的各版本; --nodeps: 忽略依赖关系; --test: 测试卸载,dry run模式
4、查询
rpm {-q|--query} [select-options] [query-options]
[select-options]

PACKAGE_NAME: 查询指定程序包是否已经安装,及其版本; -a, --all: 查询所有已经安装过的包; -f FILE: 查询指定的文件由哪个程序安装包生成; -p, --package PACKAGE_FILE: 用于实现对未安装的程序包执行查询操作; --whatprovides CAPABILITY: 查询指定的CAPABILITY由哪个包提供; --whatrequires CAPABILITY: 查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelog: 查询rpm包的changelog; -l, --list: 程序包安装生成的所有文件列表; -i, --info: 程序包相关的信息,版本号、大小、所属组等; -c, --configfiles: 查询指定的程序提供的配置文件; -d, --docfiles: 查询指定的程序包提供的文档; --provides: 列出指定程序包提供的所有CAPABILITY; -R, --require: 查询指定程序包的依赖关系; --scripts: 查询程序包自带的脚本片段;

查询命令演示
(1) 查询指定的安装后的程序

(2) 查询指定的文件由哪个程序安装包生成

(3) 查询程序包安装后生成的文件列表或者某程序的文件列表


(4) 列出指定程序包提供的所有CAPABILITY

(5) 查询指定的CAPABILITY由哪个包提供

(7) 查询指定程序包的依赖关系

(8) 查询程序包自带的脚本片段

5、校验
软件包的校验一般是验证其来源的合法性以及软件包完整性的验证;来源合法性验证利用数字签名奇数,完整性验证利用单项函数加密技术。
软件包校验命令
rpm {-V|--verify} [select-options] [verify-options]
校验过程:
(1) 首先获取并导入信任的包制作者的密钥
对于CentOS发行版来说,利用下面的命令进行密钥的导入: # rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
(2) 验证
a. 安装此组织签名的程序时,会自动执行验证; b. 手动验证:rmp -K PACKAGE_FILE
6、数据库重建
rpm管理器数据库的路径/var/lib/rpm/
获取rpm数据库工具的帮助
CentOS 6: man rpm CentOS 7: man rpmdb
数据库重建的命令
rpm {--initdb|--rebuilddb}
--initdb: 初始化数据库,当前无任何数据库可实现初始化创建一个新的;当前有时不执行任何操作; --rebuilddb: 重新构建,通过读取当前系统上所有已经安装过的程序 包进行重新创建;
[转帖]Linux学习笔记之rpm包管理功能全解的更多相关文章
- Linux学习笔记之rpm包管理功能全解
0x00 软件包管理器 所有的软件都是由文件格式的程序代码(即源代码),经过编译成为一个可执行二进制文件:对于一个软件来说,其包含二进制程序.库文件.配置文件以及帮助文件.在应用中,每次要安装程序时通 ...
- Linux学习笔记15—RPM包的安装OR源码包的安装
RPM安装命令1. 安装一个rpm包rpm –ivh 包名“-i” : 安装的意思“-v” : 可视化“-h” : 显示安装进度另外在安装一个rpm包时常用的附带参数有:--force : 强制安装, ...
- 【Linux相识相知】rpm包管理
我们日常在使用Windows的时候,如果要安装某个软件,最简单的方法就是在程序包的官网直接下载软件包到本地,一般是以.exe或者.msi格式的文件,然后一直下一步下一步就能安装成功了,但是在使用lin ...
- linux 学习笔记之文件与管理
前言: 对于windows来说,文件的系统管理都是非常简单的(这个应该有一个捂脸),通常就是重命名,复制,移动,删除,查看文件属性,查看文件内容,寻找文件.其实在图形化行中的linux也是有这样子功能 ...
- linux学习笔记----文件与目录管理
一.目录处理命令 cd:切换目录 pwd:显示当前目录 mkdir:新建一个新的目录 rmdir:删除一个空的目录 1)pwd:显示当前目录 pwd [-P] P:显示出当前的路径,而非使用连接(li ...
- node学习笔记2 —— npm包管理
全局模式安装包 将包安装为全局可用的可执行命令, 并非可以从任意地方require 将 package.json中bin定义的文件软链到统一的目录下, 该目录可以通过如下方式推算出来: path.re ...
- linux学习笔记--程序与进程管理
.工作管理 1.前台程序放后台程序 命令后 加 & 2.任务执行时将前台任务任务放到后台中并[暂停] ctr + z 3.jobs 观察后台工作状态 及多少任务在执行,可以通过 help ...
- Linux学习笔记之AIX系统上压缩与解压文件
0x00 概述 AIX机器真难用,一时半会还真适应不了. 0x01 压缩tar 命令格式: # tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加 ...
- linux学习笔记二-----文件权限管理
一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...
随机推荐
- 一篇不错的BIO, NIO文章
菜菜的我硬是读了2个小时, 哭了 BIO到NIO源码的一些事儿之BIO https://juejin.im/post/5c2cc075f265da611037298e#heading-3 整体上 BI ...
- JavaScript如何比较两个数组的内容是否相同
今天意外地发现JavaScript是不能用==或===操作符直接比较两个数组是否相等的. alert([]==[]); // false alert([]===[]); // false 以上两句代码 ...
- 一键生成koa/koa2项目
1. npm install -g koa-generator 安装生成器 2.执行 koa mytest (koa1项目) koa2 koa2test (koa2项目) 3.进入目录 cd koa2 ...
- Android中定义广播监听,其他页面发送
private LocalBroadcastManager broadcastManager; /** * 注册广播接收器 */ private void receiveAdDownload() { ...
- 26.Python三目运算符(三元运算符)用法详解
Python 可通过 if 语句来实现三目运算符的功能,因此可以近似地把这种 if 语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: True_statements if expres ...
- 线程系列1--Java创建线程的几种方式及源码分析
线程--创建线程的几种方式及源码分析 开始整理下线程的知识,感觉这块一直是盲区,工作中这些东西一直没有实际使用过,感觉也只是停留在初步的认识.前段时间一个内推的面试被问到,感觉一脸懵逼.面试官说,我的 ...
- IP输出 之 ip_output、ip_finish_output、ip_finish_output2
概述 ip_output-设置输出设备和协议,然后经过POST_ROUTING钩子点,最后调用ip_finish_output: ip_finish_output-对skb进行分片判断,需要分片,则分 ...
- Laravel find in set排序
做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列.例如,用户状态有四种: 0=>未激活:1=>正常:2=>禁用:3=>软删除 现在的需求是,我要按照:正常-> ...
- spark streaming 6: BlockGenerator、RateLimiter
BlockGenerator和RateLimiter其实很简单,但是它包含了几个很重要的属性配置的处理,所以记录一下. ))) , SECONDS) From WizNote
- python全栈开发第7天 nginx服务器和nfs的搭建及组成集群的方法
作业一:nginx服务 二进制安装nginx包 1.使用命令:yum install epel-release -y ,来安装epel,安装成功如下图:(因为我用32位的centos7老是出现各种各样 ...