如何在CentOS上进行软件包管理

时间:2019-04-29 03:18:06  来源:igfitidea点击:

RPM包

在CentOS的软件包是RPM格式。

RPM是英文Redhat Package Manager的缩写(Redhat包管理器),它已经成为Redhat和许多其他发行版上管理软件的标准。

RPM是一个包含很多文件的包。

  • 首先它包括了一个.spec的文件,这个文件提供了关于包的信息,包的功能以及依赖包。同时还包含了一个文件清单,用于指定文件的安装位置及权限。
  • PM还可以包含一个由包开发者写的预安装脚本。
  • 然后是编译好的二进制文件(很多)。
  • 最后是安装后运行的脚本。

即:

         /-- 包信息,功能
-- .spec/--- 需要的依赖包
        \--- 文件列表(指定安装位置和权限)
-- 预安装脚本
-- 二进制文件
-- 二进制文件
-- 二进制文件
-- 安装后运行的脚本

安装RPM时,系统首先会检查包的依赖包是否已安装。
RPM报安装完以后会将包的信息将被添加到RPM数据库中。

RPM数据库通常位于/var/lib/rpm目录中,包含了系统上安装的每个RPM的信息。数据库知道包之间的依赖关系,如果删除一个包会导致其他包崩溃,数据库会发出警告。数据库知道与包一起安装的每个文件及其在系统上的原始状态。它还知道每个包的文档和配置文件的位置。

RPM数据库存储位置

[root@yunkai ~]# ll /var/lib/rpm
total 53284
-rw-r--r--. 1 root root  5517312 Mar 23  2017 Basenames
-rw-r--r--. 1 root root    12288 Mar 23  2017 Conflictname
-rw-r--r--. 1 root root  1970176 Mar 23  2017 Dirnames
-rw-r--r--. 1 root root  5296128 Mar 23  2017 Filedigests
-rw-r--r--. 1 root root    16384 Mar 23  2017 Group
-rw-r--r--. 1 root root    16384 Mar 23  2017 Installtid
-rw-r--r--. 1 root root    40960 Mar 23  2017 Name
-rw-r--r--. 1 root root    12288 Mar 23  2017 Obsoletename
-rw-r--r--. 1 root root 41136128 Mar 23  2017 Packages
-rw-r--r--. 1 root root  1339392 Mar 23  2017 Providename
-rw-r--r--. 1 root root   622592 Mar 23  2017 Provideversion
-rw-r--r--. 1 root root    12288 Mar 17  2017 Pubkeys
-rw-r--r--. 1 root root   376832 Mar 23  2017 Requirename
-rw-r--r--. 1 root root   167936 Mar 23  2017 Requireversion
-rw-r--r--. 1 root root    94208 Mar 23  2017 Sha1header
-rw-r--r--. 1 root root    45056 Mar 23  2017 Sigmd5
-rw-r--r--. 1 root root    12288 Mar 16  2017 Triggername

还有一种包叫做SRPM, 即Source RPM 。这是源代码RPM包。 安装后还需要编译安装后,软件才能运行。

rpm 命令

RPM包通过rpm命令进行安装,校验或删除。

rpm -i (install安装软件包)

如何在CentOS上安装软件。

示例:安装一个软件包 MyPackage

$ rpm -ivh MyPackage-1.2.3.i386.rpm
Preparing...                ########################################### [100%]
   1:MyPackage              ########################################### [100%]
选项说明
-i或install安装一个包
-v显示详细信息
-h在控制台上打印的井号(#)来表示进度

rpm -e(erase删除)

要删除(卸载)已安装的程序包, 可以使用*-e选项*。 rpm将使用数据库来删除有关包的所有文件。
但是如果其他包还依赖于要删除的包,则rpm将会停止卸载。这时就需要强制卸载(但不建议这样做,因为会导致其他软件包运行异常)

下面是删除我们在上面安装的包的命令:

$ rpm -e MyPackage

强制卸载软件包

$ rpm -e --nodeps MyPackage

rpm -V (verify校验)

校验选项非常有用。它将包文件的当前状态与安装时的原始状态进行比较。不同的地方将使用代码标示出来:

代码说明
S文件大小不同
M模式不同(包括权限和文件类型)
5md5不同
D设备主/副号不匹配
LreadLink(2) 路径不匹配
U用户权限不同
G组权限不同
T修改时间不同

如果您在一个包上运行rpm -V,发现一个可执行文件的大小发生了变化,那么说明可能是被他人修改过的,是一个安全隐患。

rpm -U (upgrade升级)

如果要将包更新到最新版本,请使用*-U选项*进行升级。

示例:

$ rpm -Uvh My*.rpm
Preparing...                ########################################### [100%]
   1:bMyPackageDep          ########################################### [ 50%]
   1:aMyPackageNew          ########################################### [100%]

在上面的例子中,bMyPackageDep是aMyPackageNew的依赖包。

rpm -q (query查询)

使用*rpm -q *可以从rpm数据库查询一些有用的信息。

返回安装包的版本:

$ rpm -q MyPackage
MyPackage-1.0.0

如果您不记得包的全名,可以使用grep来查找它。
使用*-qa 选项*来查询所有已安装的包,并通过grep查找它。例如:

$ rpm -qa | grep IBM
IBMWSAppDev-Product-5.0-0
IBMWSSiteDevExp-Core-5.0-0
IBMWSSiteDev-Core-5.0-0

除了版本号之外,rpm -q还可以提供关于包的其他有用信息。比如:

通过rpm查询获取信息

查询选项说明

rpm -q changelog| 显示包的开发更改历史日志
rpm -qc | 显示包的配置文件
rpm -qd | 显示包的文档文件
rpm -qi | 显示包描述
rpm -ql | 显示包的文件列表
rpm -qR | 显示包的依赖项

另外一个特殊的命令:

rpm -q whatprovides <filename>

上面的命令将找出与给定文件名相关联的包。文件名必须是文件的绝对路径,因为在rpm数据库中存储的是绝对路径。