Linux 包管理工具之RPM详解

讲到包管理工具,先来了解下应用程序接口 (API)与应用程序二进制接口 (ABI)。

  • API:

    • 编程接口 Application Program Interface
    • 换句话说也就是你编写“应用程序”时候调用的函数之类的东西。对于内核来说,它的“应用程序”有两种:一种是在它之上的,用户空间的真正的应用程序,内核给它们提供的是系统调用这种接口,比如 read(2),write(2);另一种就是内核模块了,它们和内核处于同一层,内核给它们提供的是导出的内核函数,比如 kmalloc(),printk()。这些接口都是你可以在编写程序的时候直接看到的,可以直接拿来用的。
  • ABI:
    • 运行时候的调用接口Application Binary Interface
    • 二进制接口调用,如果二进制接口发生改变,则二进制文件也要对应改变,源代码不需要改变,只要重新编译,编译器会帮你完成其中改变。除非你直接使用汇编语言,这种接口一般是不能直接拿来用的。比如,内核系统调用用哪些寄存器或者干脆用堆栈来传递参数,返回值又是通过哪个寄存器传递回去,内核里面定义的某个结构体的某个字段偏移是多少等等,这些都是二进制层面上的接口。这些接口是直接给编译好的二进制用的。换句话说,如果 ABI 保持稳定的话,你在之前版本上编译好的二进制应用程序、内核模块,完全可以无须重新编译直接在新版本上运行。另一种比较特殊的 ABI 是像 /proc,/sys 目录下面导出的文件,它们虽然不是直接的二进制形式,但也会影响编译出来的二进制,如果它里面使用到它们的话,因此这些“接口”也是一种 ABI。


RPM是RPM Package Manager(RPM软件包管理器)的缩写,是RedHat的包管理工具,跟S.u.S.E的包管理工具有说不清道不明的关系,也是公认的行业标准,OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用。

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

获取程序包的途径: 系统发行版的光盘或官方的文件服务器(或镜像站点)

命名规范

  • 源代码命名规范 name-version.tar.gz

    • version: major.minor.release

      • major :主版本
      • minor:次版本
      • release:bug之类修复
  • rpm包命名规范:name-[function]-version-release.[os].arch.rpm
    • function :例如dev、utils等辅加、开发各种功能包
    • version: major.minor.release 源代码包
    • release.: rpm自己的发布版本
    • os:例如el7 redhat7 兼centos 7
    • arch:cpu架构 如x64 (noarch跟平台无关)
  • demo :源码包redis-3.0.2.tar.gz --> rpm包:redis-3.0.2-1.el7.x64.rpm

rpm使用

1、常用选项

-v:verbose,详细信息
-vv:更详细的输出

2、包来源合法性验正和完整性验正
包的合法性太重要了,在安装包之前必须确认好。
验证原理:采集包的特征码md5,用私钥加密方式(基于rsa的pgp算法)对特征码进行加密,客户端只要导入正确的公钥,就能解开私钥的加密,得到数据特征码(因为私钥只存在服务端,第三方都无法解码特征码加密的字段。意思就是不用服务端的私钥加密特征码,客户端就无法解密),然后在根据文件得到特征码跟包里面的特征码做比较。

#导入公钥
[[email protected] dvd]# rpm --import RPM-GPG-KEY-CentOS-7
[[email protected] Packages]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm
zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定

3、安装

rpm {-i|--install} [install-options] PACKAGE_FILE ...
常用install-options:
-h:hash marks输出进度条;打印50个#,每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系;不建议;
--replacepkgs:重新安装;
--noscripts:不执行任何脚本;
--nopre:preinstall:安装过程开始之前运行的脚本,%pre;
--nopost:postinstall:安装过程完成之后运行的脚本,%post;
--nopreun:preuninstall:卸载过程真正开始执行之前运行的脚本,%preun;
--nopostun:postuninstall:卸载过程完成之后运行的脚本,%postun;
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;

demo:

 [[email protected] Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
 准备中...                          ################################# [100%]
正在升级/安装...
   1:zsh-5.0.2-28.el7                 ################################# [100%]

4、升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:升级或安装;
-F:升级
--oldpackage:降级; 允许升级旧的包代替新的包
--force:强制升级;

5、卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式

[[email protected] Packages]# rpm -e zsh

6、查询

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

查看安装包数量

[[email protected] Packages]# rpm -qa|wc -l
360

查看指定文件由哪个包安装的,很好用。

[[email protected] Packages]# rpm -qf /etc/passwd
setup-2.8.71-7.el7.noarch

查看程序包安装的所有文件

[[email protected] Packages]# rpm -ql  zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
....

查看程序包元数据

[[email protected] Packages]# rpm -qi  zsh
Name        : zsh
Version     : 5.0.2
Release     : 28.el7
Architecture: x86_64
Install Date: 2018年04月25日 星期三 11时02分54秒
Group       : System Environment/Shells
Size        : 5855982
.....

查看程序包的配置文件

[[email protected] Packages]# rpm -qc  zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc

文档查看

[[email protected] Packages]# rpm -qd  zsh
/usr/share/doc/zsh-5.0.2/BUGS
/usr/share/doc/zsh-5.0.2/CONTRIBUTORS
/usr/share/doc/zsh-5.0.2/FAQ
.....

查看程序包自带的脚本片断

4段信息 可以在install时候查看
[[email protected] Packages]# rpm -q --scripts  zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
    echo "/bin/zsh" > /etc/shells
else
    grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
fi
.....

查看程序包依赖关系

[[email protected] Packages]# rpm -qR  zsh
/bin/sh
....

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

[[email protected] Packages]# rpm -q --provides  zsh
config(zsh) = 5.0.2-28.el7
zsh = 5.0.2-28.el7
zsh(x86-64) = 5.0.2-28.el7

查看CAPABILITY的提供者

[[email protected] Packages]# rpm -q  --whatprovides  ‘config(zsh)‘
zsh-5.0.2-28.el7.x86_64

查看CAPABILITY的提供者的依赖

[[email protected] Packages]# rpm -q --whatrequires  bash
rsyslog-8.24.0-12.el7.x86_64
lvm2-2.02.171-8.el7.x86_64
dracut-033-502.el7.x86_64
initscripts-9.49.39-1.el7.x86_64
[[email protected] Packages]# rpm -q --whatrequires  zsh
没有软件包需要 zsh

未安装包所有需要安装的文件查看

[[email protected] Packages]# rpm -qpl zsh-html-5.0.2-28.el7.x86_64.rpm
/usr/share/doc/zsh-html-5.0.2/zsh_31.html
/usr/share/doc/zsh-html-5.0.2/zsh_33.html
/usr/share/doc/zsh-html-5.0.2/zsh_34.html
/usr/share/doc/zsh-html-5.0.2/zsh_36.html
...

未安装包元数据查看

[[email protected] Packages]# rpm -qpi  zsh-html-5.0.2-28.el7.x86_64.rpm
Name        : zsh-html
Version     : 5.0.2
Release     : 28.el7
Architecture: x86_64
....

7、校验安装后有没有被修改

S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ

#在随意zsh的安装文件中添加一个空行
[[email protected] Packages]# vim /etc/skel/.zshrc
[[email protected] Packages]# rpm -V zsh
S.5....T.  c /etc/skel/.zshrc  #文件大小不一样  说明被改动

#删除重装
[[email protected] Packages]# rpm -e zsh
[[email protected] Packages]# rpm -i  --replacepkgs zsh-5.0.2-28.el7.x86_64.rpm
[[email protected] Packages]# rpm -V zsh   #没有消息就ok

8、数据库重建 ,一般数据库被损坏时候使用

rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;
--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;
rpm默认管理器数据库路径:/var/lib/rpm/

[[email protected] Packages]# rpmdb --initdb --dbpath=/tmp/rpm
[[email protected] Packages]# cd /tmp/rpm
[[email protected] rpm]# ls
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5

原文地址:http://blog.51cto.com/marvin89/2107904

时间: 2024-08-03 18:14:51

Linux 包管理工具之RPM详解的相关文章

Linux 包管理工具 pip 使用详解

1. pip install 安装软件 [[email protected] ~]$ pip install somepackage [...] Successfully installed somepackage 参数:--upgrade 升级某包 2. pip show 查看已安装的软件(以matplotlib为例子) [[email protected] ~]$ pip show matplotlib --- Metadata-Version: 1.1 Name: matplotlib V

Linux包管理工具(rpm/dpkg,yum/apt,alien)

概括: rpm/yum  redhat dpkg/apt  debian alien 转换 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本.软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询.RPM 全称为 Redhat Package Manager,最早由 Red Ha

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记

第130讲:Hadoop集群管理工具DataBlockScanner 实战详解学习笔记 DataBlockScanner在datanode上运行的block扫描器,定期检测当前datanode节点上所有的block,从而在客户端读到有问题的块前及时检测和修复有问题的块. 它有所有维护的块的列表,通过对块的列表依次的扫描,查看是否有校验问题或错误问题,它还有截流机制. 什么叫截流机制?DataBlockScanner扫描时会消耗大量的磁盘带宽,如果占用磁盘带宽太大,会有性能问题.所以它会只占用一小

LINUX 软件安装(rpm详解)

转自:http://www.51testing.com/?uid-227476-action-viewspace-itemid-99651 在使用Linux系统的过程中,软件包的安装是避免不了的,在Linux下,软件安装程序的种类很多,安装方法也各式各样,(舒适性自然比不上windows :-))不过我们常见的软件包有两种: 1)含有软件的源代码的压缩包,解压后需要手动编译.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). ./configure (配置) make (编

Linux 软件包管理器-----yum配置详解一

一.yum简介    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载.安装.    yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution 的应用程序相互关系,根据计算出来的软件依赖关系进行相关的升级.安装.删

程序包管理二之yum详解

上节向大家介绍了程序包管理的理论和rpm命令的使用,本篇文章接着向大家介绍rpm的前端使用工具,方便大家更快捷的管理,使用rpm包,提高工作效率. Linux程序包管理(2): Centos:yum,dnf 两个rpm前端工具 URL:ftp://10.1.0.1/pub/ YUM :yellow dog, Yellowdog,Update Modifier 采取cs架构 从文件服务器加载rpm包,安装程序到本地主机 yum repository:yum repo 存储了众多rpm包,以及包的相

Linux包管理工具

rpm和yum是centos上软件安装比较常用的工具 RPM包管理的用途 1.可以安装.删除.升级和管理软件:当然也支持在线安装和升级软件: 2.通过RPM包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个软件包: 3.可以在查询系统中的软件包是否安装以及其版本: 4.作为开发者可以把自己的程序打包为RPM 包发布: 5.软件包签名GPG和MD5的导入.验证和签名发布 6.依赖性的检查,查看是否有软件包由于不兼容而扰乱了系统: RPM的使用权限: RPM软件的安装.删除.更新只有r

Linux 高压缩率工具 XZ 压缩详解

目录 一.XZ 基础信息 二.安装 三.详解 3.1.常用的参数 3.2. 常用命令 四.扩展 4.1.unxz 4.2.xzcat 4.3.lzma 4.4.unlzma 4.5.lzcat 一.XZ 基础信息 XZ 压缩比比较高,在这里没有进行详细对比. 官网链接: https://tukaani.org/xz/ 官网介绍到: 压缩后的文件大小 gzip 小30%,比bzip2小15%. 我测试 一个 112M 的文件,xz 压缩完后 4.5M, gz 压缩完后 16M, biz2 缩完后7

Linux远程管理Windows程序Rdesktop详解

#rpm –q rdesktop                       //查找是否已经安装 #yum install rdesktop                //使用yum安装 rdesktop 使用简单,windows也不和装什么服务端,是要把远程桌面共享打开就行了 具体使用方法要先打开终端,然后输入以下命令: rdesktop -u yournape -p password -g 1024*720 192.168.0.2 rdesktop为使用远程桌面连接的命令: -u 用户