Linux-rpm命令管理介绍

来源:互联网 发布:淘宝有卖正品的吗 编辑:程序博客网 时间:2024/05/23 10:16

简介


在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM)。
The RPM Package Manager,是在Linux下广泛使用的软件包管理器。RPM此名词可能是指.rpm的文件格式的软件包,也可能是指其本身的软件包管理器(RPM Package Manager)。最早由Red Hat研制,现在也由开源社区开发。RPM通常随附于Linux发行版,但也有单独将RPM作为应用软件发行的发行版(例如Gentoo)。RPM仅适用于安装用RPM来打包的软件,目前是GNU/Linux下软件包资源最丰富的软件包类型之一。


rpm命令管理大纲

  • rpm包的命令规则
  • 安装
  • 升级与卸载
  • 查询
  • 校验

rpm包命名规则


这里以mysql的server端的包MySQL-server-5.6.16-1.rhel5.x86_64.rpm来举例说明:

  • MySQL-server 软件报名

  • 5.6.16 软件版本

  • 1软件发布的次数

  • rhel5 适合的linux平台

  • x86_64 适合的硬件平台

  • rpm rpm包的扩展名


rpm包的依赖性


  • 树形依赖: a -> b -> c
  • 环形依赖: a -> b -> c -> a
  • 模块依赖:模块依赖(依赖.so库文件),查询网站: www.rpmfind.net

rpm包的安装


1.全包名 与 包名

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


2.rpm安装

rpm -ivh 包全名
eg: rpm -ivh MySQL-server-5.6.16-1.rhel5.x86_64.rpm
选项:

-i (install) 安装-v (verbose) 显示详细信息-h (hash) 显示进度-- nodeps 不检测依赖性(不建议使用,因为基本不去处理依赖的安装的软件都不能正常使用) 

注意要安装的软件有多个包的时候,要先安装主包,再安装依赖包.比如这里的主包就是httpd包,

正在安装: httpd       x86_64        2.4.6-45.el7.centos.4         updates        2.7 M为依赖而安装: apr         x86_64        1.4.8-3.el7                   base           103 k apr-util    x86_64        1.5.2-6.el7                   base           92 k httpd-tools x86_64        2.4.6-45.el7.centos.4         updates        84 k  mailcap     noarch        2.1.41-2.el7                  base           31 k

关于rpm包依赖的解决办法:
1如果是包的依赖,就比较简单直接下载安装对应所需要的依赖包后再安装既可.
2.下面主要讲解缺少的以来是库文件的解决办法

[root@localhost ~]# rpm -ivh apr-util-1.3.9-3.el6_0.1.x86_64.rpm警告:apr-util-1.3.9-3.el6_0.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID c105b9de: NOKEY错误:依赖检测失败:    libapr-1.so.0()(64bit) 被 apr-util-1.3.9-3.el6_0.1.x86_64 需要    libdb-4.7.so()(64bit) 被 apr-util-1.3.9-3.el6_0.1.x86_64 需要

可知是缺省库文件libapr-1.so.0和libdb-4.7.so,通过网站查询找到对应的系统版本,下载安装依赖的包既可;模块依赖查询网站: 模块依赖查询网站
我这里是用的CentOS 7.3,下载安装apr-1.4.8-3.el7.i686.rpm即可.如果还有依赖依次安装最先需要的依赖再装后面的软件既可.千万注意64的操作系统不要下错了32位的依赖包.

apr-1.5.1-3.fc22.s390.html  Apache Portable Runtime library Fedora 22 for s390  apr-1.5.1-3.fc22.s390.rpmapr-1.4.8-3.el7.i686.html   Apache Portable Runtime library CentOS 7.3.1611 for x86_64  apr-1.4.8-3.el7.i686.rpmapr-1.3.9-5.el6_2.i686.html Apache Portable Runtime library CentOS 6.8 for x86_64   apr-1.3.9-5.el6_2.i686.rpmapr-1.3.9-5.el6_2.i686.html Apache Portable Runtime library CentOS 6.8 for i386 apr-1.3.9-5.el6_2.i686.rpmapr-1.3.9-5.el6_2.i686.html Apache Portable Runtime library CentOS 6.9 for i386 apr-1.3.9-5.el6_2.i686.rpmapr-1.3.9-5.el6_2.i686.html Apache Portable Runtime library CentOS 6.9 for x86_64   apr-1.3.9-5.el6_2.i686.rpm

3.rpm升级


rpm -Uvh 包全名
eg: rpm -Uvh MySQL-server-5.6.16-1.rhel5.x86_64.rpm
注意:使用用升级命令,如果没有安装就安装,如果安装的是旧版本就升级成最新版本,如果已经是最新版本,就不做任何操作.
选项:

-U (upgrade) 升级-v (verbose) 显示详细信息-h (hash) 显示进度-- nodeps 不检测依赖性(不建议使用,因为基本不去处理依赖的安装的软件都不能正常使用) 

查询未安装的包的信息(输入包名即可):


4.rpm卸载


rpm -e 包名
eg: rpm -e MySQL-server
注意: 只要输入包名,不需要输入包全名.卸载的时候也有包的依赖性,要卸载先安装的包,再卸载后安装的包.
选项:

-e (erase) 卸载-- nodeps 不检测依赖性(不建议使用,因为基本不去处理依赖的安装的软件都不能正常使用) 

5.rpm查询


rpm -q 包名 查询是否安装了指定包
rpm -qa |grep 包名 正则查,会查出包含了该包名的所有包(推荐使用)
eg: rpm -qa | grep MySQL-server
注意: 查询的包名区分大小写;

选项:
-q (query) 查询
-a (all) 所有
-i (information) 查询软件信息
-p (package) 查询未安装包的信息
-l (list) 列表


1.查询已经安装的包的包信息(输入包名即可):

eg:`rpm -qi apr-util`,里面的信息包括了该包的官网网站等信息.[root@localhost ~]# rpm -qi apr-utilName        : apr-utilVersion     : 1.3.9Release     : 3.el6_0.1Architecture: x86_64Install Date: 20170530日 星期二 143805秒Group       : System Environment/LibrariesSize        : 202360License     : ASL 2.0Signature   : RSA/SHA256, 20110706日 星期三 093703秒, Key ID 0946fca2c105b9deSource RPM  : apr-util-1.3.9-3.el6_0.1.src.rpmBuild Date  : 20110625日 星期六 123840秒Build Host  : c6b5.bsys.dev.centos.orgRelocations : (not relocatable)Packager    : CentOS BuildSystem <http://bugs.centos.org>Vendor      : CentOSURL         : http://apr.apache.org/Summary     : Apache Portable Runtime Utility libraryDescription :The mission of the Apache Portable Runtime (APR) is to provide afree library of C data structures and routines.  This librarycontains additional utility interfaces for APR; including supportfor XML, LDAP, database interfaces, URI parsing and more.

2.查询未安装的包的包信息(输入包全名即可):

eg:`rpm -qip  MySQL-server-5.6.16-1.rhel5.x86_64.rpm`,里面的信息包括了该包的官网网站等信息.和是否安装的信息[root@localhost ~]# rpm -qip  MySQL-server-5.6.16-1.rhel5.x86_64.rpmName        : MySQL-serverVersion     : 5.6.16Release     : 1.rhel5Architecture: x86_64Install Date: (not installed)Group       : Applications/DatabasesSize        : 259075416License     : Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Under GPL license as shown in the Description field.Signature   : DSA/SHA1, 20140116日 星期四 125649秒, Key ID 8c718d3b5072e1f5Source RPM  : MySQL-5.6.16-1.rhel5.src.rpmBuild Date  : 20140114日 星期二 235302秒Build Host  : tyr75Relocations : (not relocatable)Packager    : MySQL Release Engineering <mysql-build@oss.oracle.com>Vendor      : Oracle and/or its affiliatesURL         : http://www.mysql.com/Summary     : MySQL: a very fast and reliable SQL database serverDescription :The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,and robust SQL (Structured Query Language) database server. MySQL Serveris intended for mission-critical, heavy-load production systems as wellas for embedding into mass-deployed software. MySQL is a trademark ofOracle and/or its affiliatesThe MySQL software has Dual Licensing, which means you can use the MySQLsoftware free of charge under the GNU General Public License(http://www.gnu.org/licenses/). You can also purchase commercial MySQLlicenses from Oracle and/or its affiliates if you do not wish to be bound by the terms ofthe GPL. See the chapter "Licensing and Support" in the manual forfurther info.The MySQL web site (http://www.mysql.com/) provides the latest news andinformation about the MySQL software.  Also please see the documentationand the manual for more information.This package includes the MySQL server binary as well as related utilitiesto run and administer a MySQL server.If you want to access and work with the database, you have to installpackage "MySQL-client" as well!

3.查询包中文件安装位置

rpm -ql 包名
参数:
-p (package) 查询未安装包的信息
-l (list) 列表
-f (file) 查询该文件是属于哪个包的
注意:如果是想查看一个未安装的软件在安装后该软件的文件会安装在哪里,要用-p参数:
eg: rpm -qlp MySQL-server-5.6.16-1.rhel5.x86_64.rpm
下面列出的是已经安装的软件包的具体安装位置.
注意区分: `whereis apr-util`命令

[root@localhost ~]# rpm -ql apr-util/usr/lib64/apr-util-1/usr/lib64/libaprutil-1.so.0/usr/lib64/libaprutil-1.so.0.3.9/usr/share/doc/apr-util-1.3.9/usr/share/doc/apr-util-1.3.9/CHANGES/usr/share/doc/apr-util-1.3.9/LICENSE/usr/share/doc/apr-util-1.3.9/NOTICE

RMP包默认安装位置

路径 说明 /etc/ 配置文件安装目录 /usr/bin/ 可执行命令安装目录 /usr/lib/ 程序锁使用的函数库保存的位置 /usr/share/doc/ 基本软件使用手册保存位置 /usr/share/man/ 帮助文档保存位置

4.查询系统文件属于哪个rpm包

rpm -qf 系统文件名
参数:
-f (file) 查询该文件是属于哪个包的
注意:查询的前提条件,这个文件必须是通过rpm包安装出来的,比如你手动创建的文件就肯定是找不到所属的软件包的.

[root@localhost ~]# rpm -qf /usr/lib64/libaprutil-1.so.0.3.9apr-util-1.3.9-3.el6_0.1.x86_64

5.查询包的依赖性

rpm -qR 包名
选项:
-R (requires) 查询软件包的依赖性
-p (package) 查询未安装包的信息
注意:这里查询出来的依赖包括shell,.so函数库等等,实际意义不大,建议直接安装软件包,然后根据提示需要那些包再去选择下载安装

[root@localhost ~]# rpm -qR  apr/sbin/ldconfig/sbin/ldconfiglibc.so.6libc.so.6(GLIBC_2.0)libc.so.6(GLIBC_2.1)...

rpm包校验


rpm -V 已安装的包名 校验已经安装的包
选项
-V (verify)校验指定RMP包中的文件

说明:输入命令后,没有任何结果输出代表,这里安装的`apr-util-1.3.9-3.el6_0.1.x86_64.rpm`的文件没有进行过任何改动.[root@localhost ~]# rpm -V apr[root@localhost ~]# 
1.说明: 这里改改动下安装后释放出来的文件apr-util-1.3.9-3.el6_0.1.x86_64.rpm安装后释放的所有文件:[root@localhost ~]# rpm -ql apr/usr/lib/libapr-1.so.0/usr/lib/libapr-1.so.0.4.8/usr/share/doc/apr-1.4.8/usr/share/doc/apr-1.4.8/CHANGES/usr/share/doc/apr-1.4.8/LICENSE/usr/share/doc/apr-1.4.8/NOTICE/usr/lib64/libapr-1.so.0/usr/lib64/libapr-1.so.0.4.8/usr/share/doc/apr-1.4.8/usr/share/doc/apr-1.4.8/CHANGES/usr/share/doc/apr-1.4.8/LICENSE/usr/share/doc/apr-1.4.8/NOTICE2.这里博主改动下文件:vi /usr/share/doc/apr-1.4.8/LICENSE,在里随便添加了个注释语句,然后保存:This software contains code derived from UNIX V7, Copyright(C)Caldera International Inc.#yves hello3.再次执行:rpm -V apr[root@localhost ~]# rpm -V aprS.5......  d /usr/share/doc/apr-1.4.8/NOTICE这时候有了结果:S.5......  d d代表普通文档

验证内容中8个信息的具体内容如下:分别用.符号隔开

符号 意义 S 文件大小是否改变 M 文件的类型或文件的权限是否改变(rwx)是否改变 5 文件的MD5校验和是否改变(可看文件的内容是否改变) D 设备的主从代码是否改变 L 文件的路径是否改变 U 文件的属性所属者是否改变 U 文件的属性所属者是否改变 G 文件所属组是否改变 T 文件修改时间是否改变 c 配置文件(config file) d 普通文档(documentation) g “鬼文件” (ghost file) ,很少见,就是该文件不应该被这个rpm包包含 L 授权文件(license file) r 描述文件(read me)

rpm包中文件提取:


目的:
当误操作删除了某个软件包释放的文件时,可以通过该命令从原来的rpm包中提取需要的文件.
PS: 同样如果嫌麻烦,重新装一遍rpm包也是可以的.
rmp2cpi 包全名 | grep cpio -idv .文件绝对路径
注意: .不能省略

说明:
rpm2cpio # 将软件包转化问cpio格式的命令
cpio #是一个标准工具,它用于创建软件文档文件和从文档文件中提取文件

操作:
cpio 选项 < [文件| 设备]
选项:
-i :copy-in 模式,还原
-d :还原时自动新建目录
-v 显示还原过程

实现RPM包中文件提取
这里不使用<方式,而是使用管道符|来提取丢失的文件:
1.模拟丢失文件:
rm -rf /usr/lib64/libaprutil-1.so.0.3.9

2.查找该文件是属于哪个rpm包:
如果我不知道该文件的具体路径,只知道文件名为:libaprutil-1.so.0.3.9,可以上网查是哪个包的.
然后再查看该包安装后的文件释放路径:
(虽然该文件已经不存在,但是在linux的数据中还有记录,可以知道它是位于:/usr/lib64/libaprutil-1.so.0.3.9)

[root@localhost ~]# rpm -ql apr-util/usr/lib64/apr-util-1/usr/lib64/libaprutil-1.so.0/usr/lib64/libaprutil-1.so.0.3.9/usr/share/doc/apr-util-1.3.9/usr/share/doc/apr-util-1.3.9/CHANGES/usr/share/doc/apr-util-1.3.9/LICENSE/usr/share/doc/apr-util-1.3.9/NOTICE

3.通过rpm2cpio命令来提取文件:

[root@localhost ~]# rpm2cpio /root/apr-util-1.3.9-3.el6_0.1.x86_64.rpm | cpio -idv ./usr/lib64/libaprutil-1.so.0.3.9./usr/lib64/libaprutil-1.so.0.3.9398

这时候在当前目录就建立该文件的路径了:

[root@localhost ~]# ll | grep usrdrwxr-xr-x. 3 root root       19 530 16:27 usr

4.拷贝丢失文件到原来的目录即可:
cp /root/usr/lib64/libaprutil-1.so.0.3.9 /usr/lib64/

原创粉丝点击