Linux学习之RPM包管理-rpm命令管理

目录

简介

RPM包依赖性

包全名与包名

rpm软件包安装

rpm软件包卸载

升级降级rpm软件包

rpm软件包的查询

rpm软件包校验

简介

RPM是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo
Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

  

RPM软件包名例子:
sudo-1.7.2p1-5.e15.i386.rpm
其中
软件名(sudo)
版本号 (1.7.2pl)
软件发布的次数(5)
适合的Linux平台 (el5)
适合的硬件平台(i386)
rpm包扩展名(rpm)

  

RPM包依赖性

RPM包在应用的时候,最大的问题就是依赖性,安装一个软件包需要安装多个依赖包。
树形依赖:a->b->c
安装a,需要先安装b,安装b需要先安装c
安装:我们要先安装c,再安装b,再安装a。
卸载:先卸载a,再卸载b,然后卸载c。 环形依赖:a->b->c->a
安装:一条命令安装a,b,c。 模块依赖:模块依赖查询网站:www.rpmfind.net
模块依赖又称为库依赖,指依赖的是某个包里面的某个软件,当然只需要安装那个包就行,那么我们怎么知道这个软件属于哪个包,上面这个网站可以查询。

  

包全名与包名

包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径。
全名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库。

  

在下面所有操作前我们先把光盘挂载上去

挂载光盘:
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

  

rpm软件包安装

rpm -ivh 包全名
安装的rpm软件包主要参数
-i 或--install 安装软件包
-v 显示安装过程的信息
-vv 显示安装过程中的详细信息
-h 以#号来表示程序包的执行进度 安装升级卸载中会用到的一些参数 --test:测试安装,只显示过程,并不执行安装 --excludedocs:不安装软件包中的文档文件。 --prefix PATH:将软件包安装到由PATH指定的路径下。 -- nodeps:忽略依赖关系,在安装程序的时,有些时候会因为软件包的依赖关系无法安装,这时就可以用nodeps来解决。 -- replacepkgs:覆盖安装软件 -- replacefiles:只覆盖软件的文件 -- nosignature: 不检查软件包来源合法性 -- nodigest:不检查软件包的完整性 -- noscripts:不执行程序包脚本,在软件包中通常都有一些脚本,来定义一些像安装的路径之类的。 -- nopre:不执行安装前脚本 -- nopost:不执行安装后脚本 -- nopreun:不执行卸载前脚本 -- nopostun:不执行卸载后脚本 -- force: 强制安装

  

例子

rpm -ivh sudo-1.7.2p1-5.el5.i386.rpm

  

 安装时的特殊情况

覆盖安装
软件包已经被安装,如果覆盖该1安装软件包,可以在命令行上使用--replacepkgs选项
rpm -ivh --replacepkgs sudo-1.7.2p1-5.el5.i386.rpm 文件冲突
如果要安装软件包中有一个文件已在安装其它软件包时安装,会出现以下错误信息
要想让rmp忽略该错误信息,请使用--replacefiles命令行选项
rpm -ivh --replacefiles sudo-1.7.2p1-5.el5.i386.rpm 未解决依赖关系
RPM软件包可能依赖于其它软件包,在安装了特定包之后才能安装该软件包
rpm -ivh sudo-1.7.2pl-5el5.i386.rpm
failed dependencies
sudo is needed by bark-3.2-11
必须安装完所依赖的软件包。才能解决这个问题,强制安装使用--nodeps选项

  

rpm软件包卸载

-e或者--erase来卸载
rpm -e sudo-1.7.2p1-5.el5.i386.rpm
注意:如果其它软件包有依赖关系,卸载时会产生提示信息,可使用--nodeps强行卸载。

  

升级降级rpm软件包

-U 或 --upgrade 安装有旧版程序包,则升级如果不存在旧版程序包,则安装
-F 或 --freshen安装的有旧版程序包则升级,如果不存在旧版程序包,则不执行升级操作 -- oldpackage:安装旧版本的软件包,把软件降级 注:如果旧程序的配置文件安装后曾被修改,升级时新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名“filename.rpmnew”后保留。

  

rpm软件包的查询

查询:
rpm -q 包名
例子:rpm -q sudo
例子:rpm -qa | grep samba
q选项可以查询rpm软件包的信息

下面是q选项的一些参数

-a: 所有包,可以用来查询软件来自那个rpm包

-f: 查看指定的文件由哪个程序包安装生成

-p:针对尚未安装的程序包文件做查询操作

-- whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

-- whatrequires CAPABILITY:查询指定的CAPABILITY被
哪个包所依赖 --changelog:查询rpm包的更新信息 -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information
-l: 查看指定的程序包安装后生成的所有文件 --scripts:程序包自带的脚本 --provides: 列出指定程序包所提供的CAPABILITY -R: 查询指定的程序包所依赖的CAPABILITY

  

rpm软件包校验

rpm -V或--verify 可以验证软件包文件有没有被修改过

S 文件大小不同
M 权限和文件类型和原文件不一致
5 MD5不一致
D 设备主/次编号不匹配
L 路径不匹配
U 属主不同
G 所属组不一致
T 修改时间不同
P 功能不同
rpm - K或checksig 检查包的完整性和签名
上面的问题不是软件包有问题,而是系统默认没有导入密钥,所以检查结果是not ok。下面我们导入密钥,在系统安装是安装程序会把密钥放在/etc/pkirpm-gpg/目录下,密钥的文件名是RPM-GPG-KEY-CentOS-7。 文件类型:
c 配置文件(config file)
d 普通文件 (documenttation)
g "鬼文件"(ghost file),很少见,就是该文件不应该被这个RPM包包含
l 授权文件(license file)
r 描述文件 (read me)

  

Linux学习之RPM包管理-rpm命令管理(十六)的更多相关文章

  1. 15. Linux提取RPM包文件(cpio命令)详解

    在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令.cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复 ...

  2. Linux课程---9、安装RPM包(RPM的全称是什么)

    Linux课程---9.安装RPM包(RPM的全称是什么) 一.总结 一句话总结: redhat package management 1.在Packages中查找和php相关的文件如何查找? ls ...

  3. (转) centos7 RPM包之rpm命令

    原文:https://blog.csdn.net/capecape/article/details/78529159 RPM包与源码包的区别1.软件包分类 源码包:C源代码包 rpm包:编译之后的二进 ...

  4. Linux学习之路-Linux-at及cron命令【7】---20171215

    Linux学习之路-Linux-at及cron命令[7]---20171215 DannyExia000人评论986人阅读2017-12-24 17:28:03   ntpdate 命令 [root@ ...

  5. 『学了就忘』Linux服务管理 — 76、RPM包安装的服务管理

    目录 1.独立服务的启动管理 2.独立服务的自启动管理 方式一: 方式二:(推荐) 方式三: 3.验证 1.独立服务的启动管理 (1)使用/etc/init.d/目录中的启动脚本启动服务(推荐) [r ...

  6. 软件包管理_rpm命令管理_yum工具管理_文件归档压缩_源码包管理

    rpm命令管理软件 对于挂载的像U盘那种都会在midea目录下,但是会显示在桌面上 安装软件(i:install,v:verbose冗长的,h:human):rpm  -ivh  xxxx.rpm 安 ...

  7. Linux学习笔记:常用100条命令(一)

    linux常用命令 1.关机 shutdown -h now 立刻关机 poweroff shutdown -r now 立刻重启 reboot logout 注销 2.进入图形界面 startx 3 ...

  8. linux学习笔记(1) -- 关于命令的一些操作

    Linux 目录 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录.所有的东西都是从这里开始.当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到ho ...

  9. 从rpm包提取rpm spec 的几种方法

    包含了源码包 先安装,然后在rpmbuild 目录直接可以查看文件 不用安装 ,使用rpm2cpio rpm2cpio myrpm.src.rpm | cpio -civ '*.spec' 没有源码 ...

  10. Linux学习笔记(3)-常用命令

    江湖传言,Linux和Windows不同,他主要的用途是在一些服务器,或者片内系统上,所以人机交互界面自然就没有Windows那么漂亮,其实也没有那个必要. 所以,学习Linux的第一步,就是学习他那 ...

随机推荐

  1. Jquery如何获取iframe里面body的html呢?

    如果是自己网页的话,可以这样,$("iframe").contents().find("body").html();意思是,获取iframe里面页面body的内 ...

  2. bs4

  3. Json数据和对象互转

    1.创建UserTest类 package com.cppdy; public class UserTest { private String name; private String sex; pu ...

  4. strchr()

    strchr()主要有2个最有用的用法: 第一个:搜索字符串在另一字符串中的第一次出现.并返回剩余的部分 $str = "hello_chrdai_1993"; $not_incl ...

  5. bzoj1195 神奇的ac自动机+状态压缩dp

    /* 难的不是ac自动机,是状态压缩dp 之前做了一两题类似题目,感觉理解的还不够透彻 */ #include<iostream> #include<cstdio> #incl ...

  6. bzoj 2150

    然后考虑正解 我们发现,最坏情况就是每个点都派驻军队,所以答案至多是“.”的数目 而且,每个点都至多只有一个入度和一个出度,所以我们可以将每个点拆成两个点,一个作为入点,一个作为出点,然后所有图上能到 ...

  7. C++ 关闭显示器

    好困,想躺一下,关灯.上床,笔记本的屏幕还亮着,好刺眼,睡不着! 脑子里出现一个疑问,怎么用C++写一个关闭屏幕的小程序呢? 参考了网上已有的例子,最简化: #include <windows. ...

  8. IDEA复制项目操作

  9. Python作业之分页显示内容

    #coding:utf8 user_list =[] for i in range(1,302): tmp = "{'user':'alex-%s,'email':'alex%s@email ...

  10. vue 引入Element组件

    1.打开cmd,在当前目录中运行: npm i element-ui -S 2.src/main.js(红色的) import Vue from 'vue' import App from './Ap ...