rpm 包管理器

二进制应用程序的组成部分:

二进制文件、库文件、配置文件、帮助文件

程序包管理器:不同厂商的程序,包管理器也不同。

debian:deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

rpm: Redhat Package Manager

RPM Package Manager

rpm包命名方式:

name-VERSION-release.arch.rpm

例:bash-4.2.46-19.el7.x86_64.rpm

名字bash-主版本号4,小版本(补丁)号.2.46,厂商编号el7.x86_64

包命名和工具

包的分类和拆包

Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm 开发子包

Application-utils-VERSION-ARHC.rpm 其它子包

Application-libs-VERSION-ARHC.rpm 其它子包

包之间:可能存在依赖关系,甚至循环依赖 解决依赖包管理工具:

yum:rpm包管理器的前端工具

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具

库文件

查看二进制程序所依赖的库文件: ldd +命令文件的绝对路径。,也可以写作 ldd ‘which 命令’的形式。

管理及查看本机装载的库文件:

ldconfig 加载库文件

/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径

映射关系位置

配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

缓存文件:/etc/ld.so.cache

包管理器

程序包管理器:

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

包文件组成 (每个包独有)

RPM包内的文件

RPM的元数据,如名称,版本,依赖性,描述等

安装或卸载时运行的脚本

数据库(公共):/var/lib/rpm

程序包名称及版本

依赖关系

功能说明

包安装后生成的各文件路径及校验码信息

rpm包的管理

  1. CentOS系统上使用rpm命令管理程序包:有安装、卸载、升级、查询、校验、数据库维护这几种安装格式:
  2.  
  3. rpm {-i|--install主选项} [install-options次选项] PACKAGE_FILE
  4.  
  5. -v: 显示详细安装信息
  6.  
  7. -vv:显示更详细的安装信息
  8.  
  9. -h: 以#(符号的形式)来显示程序包管理执行进度
  10.  
  11. rpm -ivh PACKAGE_FILE ... (最常用的安装方式,可以当一个固定格式使用)
  12.  
  13. -e + 文件名 卸载指定的文件,如果该文件只有一个版本的话,无需指定版本号。

rpm的子选项

  1. -i 安装
  2.  
  3. --test 仅测试,不安装 没什么意义
  4.  
  5. --nodeps 忽略依赖性 忽略依赖的库或文件,强行安装,能安装上,但不一定能用。
  6.  
  7. --replacepkgs 重复安装已安装过的包,文件覆盖,后来装的覆盖之前装的
  8.  
  9. --replacefiles 将要安装包的部分文件与其他已安装的包,如果有冲突,忽略之,继续安装。

这样的安装可以实现同一软件有多个版本共存。当中完全相同的文件会被覆盖。

命令 :diff 文件1 文件2 比较两个文件的不同之处。

  1. --noscripts:不执行程序包脚本,这样做会导致一些软件出问题,
  2.  
  3. %pre: 安装前脚本; --nopre
  4.  
  5. %post: 安装后脚本; --nopost
  6.  
  7. %preun: 卸载前脚本; --nopreun
  8.  
  9. %postun: 卸载后脚本; --nopostun

安装包的升级:格式 rpm {-U|--upgrade} [install-options] PACKAGE_FILE...

  1. 升级 -U 如果装的有旧的,则升级,如果未装旧的,则安装新的。 不保留旧版本。
  2.  
  3. 升级 -F 如果装的有旧的,则升级,如果未装旧的,不安装新的。
  1. 降级:
  2.  
  3. --oldpackage 已装新的,再装旧的,新的被覆盖。
  4.  
  5. --force 除了依赖性的无法安装外,其余情况强制安装。 等于--replacepkgs +--replacefiles +--oldpackage

升级注意项:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核,尽量不要直接用U,因为U在升级过程中,会删除旧版本,如果升级出错,会丢失丢版本。尽量用ivh升级内核。

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew后保留。即:如果新老版本有重复的,则会把新版本的重复文件重命名为*.rpmnew,旧版本的保留。新老版本两种配置文件都会保留

  1. rpm软件包查询:
  2.  
  3. -q 查询,直接-q+文件名,可显示指定文件的信息,(安装与否,版本号等等,如有有个版本则全部显示)
  4.  
  5. -qa 查询安装的所有包,可以通过通配符或命令查找来选择性查看
  6.  
  7. rpm -qa scr*
  8.  
  9. rpm -qa |grep ^scr
  10.  
  11. -qf 查询指定的文件由哪一个rpm包提供(文件用路径表示)
  12.  
  13. -qp 指定未安装的rpm 格式为 rpm -q --provides -p +文件的绝对路径。
  14.  
  15. -q --provides 软件包名 查看指定的软件包提供了哪些能力(包括提供库,执行程序等等),一般的都是把版本号之类的报出来。可以使用-a 显示当前系统中由已安装过的包提供的所有能力
  16.  
  17. -q --whatprovides webserver 查看指定的能力由哪一个软件包提供,也可以查询文件来自哪个包,格式:
  18.  
  19. rpm -q ----whatprovides 文件路径。查看指定文件来自哪个包。

###如果丢失了某一文件,知道这个文件路径后。使用rpm -qf +丢失文件的路径来查找出,这个文件由哪个包提供,但是不要直接安装整个包,这将会导致其他的问题出现。将这个包复制一份到其他目录。再使用 rpm2cpio将查找到的包转换为归档模式。

  1. 格式:
  2.  
  3. # rpm2cpio 包文件|cpio –itv 预览包内文件
  4.  
  5. # rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
  6.  
  7. 从释放的包文件当中,将丢失的文件复制到原来的目录下,完成修复。
  8.  
  9. -q --whatrequires CAPABILITY 查询指定的CAPABILITY被哪个包所依赖
  10.  
  11. -qR 软件包名 查看指定的软件包依赖哪些能力
  12.  
  13. -qc 软件包名 查看指定的软件包的配置文件 (工作中使用很多的)
  14.  
  15. -qd 软件包名 查看指定的软件包的帮助文档 (工作中使用很多的)
  16.  
  17. -ql 软件包名 查看该软件包所提供的所有文件 (工作中使用很多的) qpl
  18.  
  19. -qi 软件包名 查看指定软件包的信息 (工作中使用很多的) qpi
  20.  
  21. -q --scripts 软件包名 查看指定软件包的安装脚本

RPM包的校验:

  1. -V 查看指定包所提供的文件是否发生过改变,每个包都有自己的初始值,使用-V可以检查包的值是否发生了变化,只能查看已安装的程序包的值,并将发生变动的用下列符号表示:
  2.  
  3. S file Size differs 文件大小不同
  4.  
  5. M Mode differs (includes permissions and file type) 模式不同(包括权限和文件类型)。
  6.  
  7. 5 digest (formerly MD5 sum) differs 文件(以前的MD5总和)不同,每一个文件都有一个自己的MD5值(加密后的值),如果文件被改过,则MD5也会发生变化。
  8.  
  9. D Device major/minor number mismatch 设备内容发生变化。
  10.  
  11. L readLink(2) path mismatch 指向的路径不匹配。
  12.  
  13. U User ownership differs 所属用户发生变化。
  14.  
  15. G Group ownership differs 所属组发生变化。
  16.  
  17. T mTime differs 文件的修改时间不同。
  18.  
  19. P capabilities differ 包的能力不同。

合法性检查:文件有两把钥匙,公钥和私钥。公钥加密的数据,公钥没法解开,只有私钥才可以解开。同理,私钥加密的数据,私钥没法解开,只有公钥可以。公钥是每个人都能拥有的。私钥只有服务端有。举例a(服务端),b,c三个人。a需要b发过来的加密数据,先把公钥给b,b将文件用公钥加密之后发给a。这时候c把数据截下来了,但是公钥是没法解开公钥的加密文件的,所以截下来没什么用。而a收到这份由公钥加密的数据后,用私钥就可以轻松解密。而使用私钥加密的文件,作用只有一个,检查这个文件,是否是真正的,由服务端发送过来的,因为只有服务端才有私钥,而公钥是每个人都有的。 私钥加密的文件,只有公钥才可以解。

导入所需公钥:-K 子选项 --nosignature: 不检查来源合法性 子选项 --nodigest:不检查包完整性

-K + 完整的rpm文件名 检查包的完整性和签名,检查之前,先检查机器上是否拥有对应的公钥。比如centos7的公钥是RPM-GPG-KEY-CentOS-7,查找命令:rpm-qa“gpg-pubkey*”可以查看电脑上公钥是否拥有。如果没有,则去光盘目录下找到 RPM-GPG-KEY-CentOS-7文件并导入。

导入命令:rpm -- import /光盘的绝对路径/RPM-GPG-KEY-CentOS-7 ,这样就能用rpm-qa“gpg-pubkey*”查找到了.

如果没有变动,则所有的项目上都会提示OK字样。变动就提示 NOT OK.

rpm能检查出来是否合法,但是-ivh依然会安装,yum和dnf则会拒绝安装不合法的软件.

RPM数据库:所有安装的rpm的数据,安装包的路径,依赖与那些程序或服务等等都在这里,如果丢失,则会导致一些命令无法使用.数据库丢失之后,使用rpm查询之类的命令时候,系统将自动重建,但是只保留重建之后的数据了.

rpmdb 命令用于初始化和重建rpm数据库。默认数据库位置:/var/lib/rpm/

--initdb:初始化RPM数据库;

--rebuilddb:从已安装的包头文件,反向重建RPM数据库。

在centos7下 安装bash-completion包,可以实现自动补齐子命令。

  1. # yum install bash-completion

rpm 包管理器的更多相关文章

  1. 11.19 rpm:RPM包管理器

    rpm命令的全称是Red Hat Package Manager(Red Hat包管理器),几乎所有的Linux发行版本都使用了这种形式的命令管理.安装.更新和卸载软件. 概括地说,rpm命令包含了五 ...

  2. Linux中rpm包管理器

    包全名: 1.操作的包是没有安装的软件包时,使用全名,而且要注意路径 2.例如:jdk-8u131-linux-x64.rpm包名: 1.操作的是已经安装好的软件包,使用包名,是搜索/var/lib/ ...

  3. RPM包管理命令rpm

    RPM包管理器是Linux系统中最早的软件包管理软件之一,也是目前最流行的软件包管理器,许多发行版都使用RPM作为默认的软件包管理软件. RPM软件包名称格式: samba-client-3.0.33 ...

  4. rpm包管理

    库文件 linux上,库文件是非常重要的,因为很多的软件都不是将所有的自己在需要的函数库自己写好,而是将一部分自己软件特有的库文件自己写,通用的库文件全部动态链接到公共库上去,这样不仅节省空间,同时用 ...

  5. Linux包管理器

    按Linux系统分类 Redhat系列:Redhat(本身就是Centos).Centos.Fedora等,采用Dpkg包管理器 Debian系列:Debian.Ubuntu等,使用RPM包管理器 R ...

  6. 【Linux相识相知】rpm包管理

    我们日常在使用Windows的时候,如果要安装某个软件,最简单的方法就是在程序包的官网直接下载软件包到本地,一般是以.exe或者.msi格式的文件,然后一直下一步下一步就能安装成功了,但是在使用lin ...

  7. linux 各种发行版及包管理器的关系

    linux 各种发行版及包管理器的关系 Linux发行版列表 基于Kpkg(Debian 系) Debian GNU / Linux 及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...

  8. Linux新手的最佳包管理器

    一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Linux开发 中,包管理器非常重要,知道如何使用多种包 ...

  9. Linux学习之RPM包管理-rpm命令管理(十六)

    Linux学习之RPM包管理-rpm命令管理 目录 简介 RPM包依赖性 包全名与包名 rpm软件包安装 rpm软件包卸载 升级降级rpm软件包 rpm软件包的查询 rpm软件包校验 简介 RPM是R ...

随机推荐

  1. bzoj 1082: [SCOI2005]栅栏【二分+dfs】

    二分答案,dfs判断是否可行,当b[k]==b[k-1]时可以剪枝也就是后移枚举位置 #include<iostream> #include<cstdio> #include& ...

  2. css - 单词的自动换行问题

    转载自:解决文档中有url链接时被强制换行的问题 问题 当行内出现很长的英文单词或者url的时候,会出现自动换行的问题,为了美化页面,往往会希望这些很长的英文单词或者url能够断开来,超出的部分换行到 ...

  3. JSP | 基础 | JSP状态管理 | Cookie

    Cookie : 是web服务器保存在客户端的一系列文本信息. Cookie的作用: 1.对特定的对象的追踪 2. 3. JSP中创建Cookie以及使用 创建Cookie对象 写入Cookie对象 ...

  4. 跟我一起玩Win32开发(22):抓取屏幕

    关于如何拷贝屏幕并保存,这里已经有现成的例子,我也不必去Copy人家了,我一向不喜欢Copy.这里有一个完整的例子,可以看看. http://msdn.microsoft.com/EN-US/libr ...

  5. python之os、sys和random模块

    import os # print(os.getcwd())#获取当前目录,绝对路径# print(os.chdir('../'))#更改当前目录,../的意思是退回上一级目录# print(os.g ...

  6. EOJ Monthly

    ###2018.10 A.oxx 的小姐姐们 oxx 和他的小姐姐(们)躺在图书馆前的大草坪上看星星. 有强迫症的 oxx 想要使得他的小姐姐们正好躺成一块 n×m 的长方形. 已知小姐姐的形状是 1 ...

  7. [未读]JavaScript高效图形编程

    去年买来就一直搁置,因为是js游戏相关,暂时还用不到.

  8. RHEL 6.5----haproxy实现负载均衡

    主机名 IP master 192.168.30.130 node-1 192.168.30.131 node-2 192.168.30.132 在master上安装 [root@master ~]# ...

  9. AngularJS 表单验证手机号(非必填)

    代码: <form ng-app="myApp" ng-controller="validateCtrl" name="myForm" ...

  10. C/C++ static

    C/C++中static关键字作用总结 1.先来介绍它的第一条也是最重要的一条:隐藏.(static函数,static变量均可) 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全 ...