Linux学习—rpm包管理

前言

在linux上,一个软件一般由二进制程序,库文件,配置文件和帮助文件组成。其中:php

  • 二进制程序通常都放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin和/usr/local/sbin这几个目录下边;
  • 库文件都放在/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib和/usr/local/lib64这些目录下;
  • 配置文件通常都是放在/etc这个目录下;
  • 而最基本的man帮助文件则是放在/usr/share/man这个目录下的。

程序包管理器

在应用中,每次要安装程序时经过找源代码而后去编译成二进制文件,这个过程要花费大量的时间,因此就有了程序包管理器。前端

程序包管理器的功能是:将编译好的应用程序的各组文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操做。node

前端工具

利用这种程序包管理器咱们只能手动解决包之间的依赖关系。所谓自动解决依赖关系,无非就是在某个程序安装以前对该程序包文件进行分析看其都依赖哪些程序,而后将这些程序一并安装,从而解决软件包的依赖文件,咱们将自动解决依赖关系的工具称为解决依赖关系的前端工具。linux

Linux发行版本主要分为两类:类RedHat和类Debain,不一样的发行版本上所使用的程序包管理器各不相同,下图是各发行版本所使用的程序包管理器:数据库

clipboard.png

 

rpm包命名

一个rpm程序包的格式为:httpd-2.2.15-59.el7.x86_64.rpm,其中:segmentfault

  • httpd是rpm软件包的名称;
  • 2.2.15是rpm软件包的版本编号;
  • 59.el7是发布许可;
  • x86_64表示适用哪些平台,这里适用于AMD/Intel 64位体系结构构键的计算机。
  • .rpm是rpm软件包的文件扩展名

 

rpm命令管理程序包

rpm程序包管理器主要实现的功能有:安装、升级、查询、校检以及数据库维护centos

rpm命令格式:ide

rpm [OPTIONS] [PACKAGE_FILE]

命令选项:函数

  • -i, --install: 安装
  • -U, -update, -F, --freshen: 升级
  • -e, --erase: 卸载
  • -q, --query: 查询
  • -V, --verify: 校验
  • --builddb, --initdb: 数据库的建立

一、安装

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软件包

clipboard.png

(2) 忽略依赖关系安装

clipboard.png

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

clipboard.png

(3) 测试安装

clipboard.png

clipboard.png

(4) 从新安装

clipboard.png

二、升级

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)后提供;

三、卸载

rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

--allmarches: 卸载全部匹配指定名称的程序包的各版本;
--nodeps: 忽略依赖关系;
--test: 测试卸载,dry run模式

四、查询

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) 查询指定的安装后的程序

clipboard.png

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

clipboard.png

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

clipboard.png

clipboard.png

(4) 列出指定程序包提供的全部CAPABILITY

clipboard.png

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

clipboard.png

(6) 查询指定的CAPABILITY被哪一个包所依赖

clipboard.png

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

clipboard.png

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

clipboard.png

五、校验

软件包的校验通常是验证其来源的合法性以及软件包完整性的验证;来源合法性验证利用数字签名奇数,完整性验证利用单项函数加密技术。

软件包校验命令

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

六、数据库重建

rpm管理器数据库的路径/var/lib/rpm/

获取rpm数据库工具的帮助

CentOS 6: man rpm
CentOS 7: man rpmdb

数据库重建的命令

rpm {--initdb|--rebuilddb}

--initdb: 初始化数据库,当前无任何数据库可实现初始化建立一个新的;当前有时不执行任何操做;
--rebuilddb: 从新构建,经过读取当前系统上全部已经安装过的程序 包进行从新建立;

 

 

 

 

 

参考:

rpm包管理功能全解

centos系统之rpm包管理

相关文章
相关标签/搜索