您的位置:首页 > 运维架构 > Linux

Linux-rpm命令管理介绍

2017-05-30 15:20 423 查看

简介

在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.rpm
apr-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.rpm
apr-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.rpm
apr-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.rpm
apr-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.rpm
apr-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-util
Name        : apr-util
Version     : 1.3.9
Release     : 3.el6_0.1
Architecture: x86_64
Install Date: 2017年05月30日 星期二 14时38分05秒
Group       : System Environment/Libraries
Size        : 202360
License     : ASL 2.0
Signature   : RSA/SHA256, 2011年07月06日 星期三 09时37分03秒, Key ID 0946fca2c105b9de
Source RPM  : apr-util-1.3.9-3.el6_0.1.src.rpm
Build Date  : 2011年06月25日 星期六 12时38分40秒
Build Host  : c6b5.bsys.dev.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://apr.apache.org/ Summary     : Apache Portable Runtime Utility library
Description :
The mission of the Apache Portable Runtime (APR) is to provide a
free library of C data structures and routines.  This library
contains additional utility interfaces for APR; including support
for 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.rpm
Name        : MySQL-server
Version     : 5.6.16
Release     : 1.rhel5
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Databases
Size        : 259075416
License     : Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Under GPL license as shown in the Description field.
Signature   : DSA/SHA1, 2014年01月16日 星期四 12时56分49秒, Key ID 8c718d3b5072e1f5
Source RPM  : MySQL-5.6.16-1.rhel5.src.rpm
Build Date  : 2014年01月14日 星期二 23时53分02秒
Build Host  : tyr75
Relocations : (not relocatable)
Packager    : MySQL Release Engineering <mysql-build@oss.oracle.com>
Vendor      : Oracle and/or its affiliates
URL         : http://www.mysql.com/ Summary     : MySQL: a very fast and reliable SQL database server
Description :
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
and robust SQL (Structured Query Language) database server. MySQL Server
is intended for mission-critical, heavy-load production systems as well
as for embedding into mass-deployed software. MySQL is a trademark of
Oracle and/or its affiliates

The MySQL software has Dual Licensing, which means you can use the MySQL
software free of charge under the GNU General Public License
(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
licenses from Oracle and/or its affiliates if you do not wish to be bound by the terms of
the GPL. See the chapter "Licensing and Support" in the manual for
further info.

The MySQL web site (http://www.mysql.com/) provides the latest news and
information about the MySQL software.  Also please see the documentation
and the manual for more information.

This package includes the MySQL server binary as well as related utilities
to run and administer a MySQL server.

If you want to access and work with the database, you have to install
package "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.9
apr-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/ldconfig
libc.so.6
libc.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/NOTICE

2.这里博主改动下文件:vi /usr/share/doc/apr-1.4.8/LICENSE,在里随便添加了个注释语句,然后保存:
This software contains code derived from UNIX V7, Copyright(C)
Caldera International Inc.
#yves hello

3.再次执行:rpm -V apr
[root@localhost ~]# rpm -V apr
S.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.9
398 块


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

[root@localhost ~]# ll | grep usr
drwxr-xr-x. 3 root root       19 5月  30 16:27 usr


4.拷贝丢失文件到原来的目录即可:

cp  /root/usr/lib64/libaprutil-1.so.0.3.9  /usr/lib64/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: