Linux系统之RPM包管理

Posted jasonminghao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统之RPM包管理相关的知识,希望对你有一定的参考价值。

01 RPM包管理

1.1RPM概述

RPM是RedHat Package Manager的缩写,由Redhat公司开发出来的。
RPM是通过数据库记录的方式来将你所需要的软件安装到你的Linux主机上一套管理程序。也就是说,你的linux系统中存在着一个关于RPM的数据库,它记录了安装包以及包之间依赖相关性。

1.软件包类型

分类 安装 版本
rpm包 预先编译打包,安装简单 软件版本较低
源码包 手动编译打包,安装频繁 软件版本随意
二进制包 解压即可使用,安装简单 不能修改源码

2.常见的软件包

注意:不管是源码包,还是二进制包,安装时都可能会有依赖关系!

系统平台 包类型 工具 自动解决依赖
RedHat/Centos RPM rpm yum
Ubuntu/Debian DPKG dpkg apt

3.RPM获取途径

  1. RedHat光盘或官方网站
  2. RPM查询官网网站
  3. nginx软件官网网站

4.RPM软件包命名规则

RPM包命名以-将软件分成了若⼲部分 bash-4.2.46-28.el7.x86_64.rpm

name: 软件包名称
version: 版本号, 主版本, 重⼤更新. 次版本, ⼦功能更新. 修订号, 修复bug
release: 发布版本 el6, el7(hostnamectl)
arch: 系统平台, i386、x86_64(uname -m,hostnamectl)

rpm包的组成:

安装释放的⽂件
软件包的元数据(版本,发布号,架构,描述,要求,更改⽇志等)
脚本:安装前执⾏的脚本和安装后的脚本

5.查看系统光驱中RPM软件包

如果你的系统中还有系统的安装盘,⾸先我们让虚拟机链接上我们的系统安装盘,然后我们可以 通过mount /dev/cdrom /mnt 命令把光驱挂载到/mnt⽬录下,那么你会在/mnt/Packages⽬录下 看到很多 .rpm 的包⽂件。

[root@localhost ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# ls /mnt/
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL

[root@localhost ~]# ls /mnt/Packages/ |head

1.2RPM包安装

-i: 安装
-v: 详细信息
-h: 安装进度
--test: 测试是否能够安装成功
--force: 强制重新安装
--nodeps: 忽略依赖关系

//安装软件包,需要指定软件包绝对路径
[root@xmh ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm  
[root@xmh ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm 

//在软件包所在⽬录下,可以不指定绝对路径
[root@xmh ~]# cd /mnt/Packages/
[root@xmh Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 

//测试⼀个软件包是否能在该系统上安装
[root@xmh ~]# rpm -ivh --test /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm 

//如果软件包存在, 强制再次安装
[root@xmh ~]# rpm -ivh --force /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm   

//安装samba服务需要依赖其他组件, 使⽤--nodeps可重新强制安装 
[root@xmh ~]# rpm -ivh --nodeps /mnt/Packages/samba-4.6.2-8.el7.x86_64.rpm

1.3RPM包查询

使⽤rpm命令查询已安装好的rpm包, 需要了解如下参数:

rpm -q #查看指定软件包是否安装 
rpm -qa #查看系统中已安装的所有RPM软件包列表 
rpm -qi #查看指定软件的详细信息 
rpm -ql #查询指定软件包所安装的⽬录、⽂件列表 
rpm -qc #查询指定软件包的配置⽂件 
rpm -qd #查询指定软件包的帮助⽂档 
rpm -qf #查询⽂件或⽬录属于哪个RPM软件 
rpm -q --scripts #查询rpm包安装前和安装后执⾏的脚本

//查询未安装的软件包信息 
rpm -qip #查询未安装的rpm包详细信息 
rpm -qlp #查询未安装的软件包会产⽣哪些⽂件

//查询vsftpd这个rpm包是否安装 
[root@xmh ~]# rpm -q vsftpd

//模糊查找系统已安装的rpm包 
[root@xmh ~]# rpm -qa |grep ftp

//查询vsftpd软件包的相关信息 
[root@xmh ~]# rpm -qi vsftpd

//查询rpm包所安装的⽂件 
[root@xmh ~]# rpm -ql vsftpd

//查询rpm包相关的配置⽂件 
[root@xmh ~]# rpm -qc vsftpd

//查询配置⽂件或命令来⾃于哪个rpm包 (命令不存在系统则无法查询)
[root@xmh ~]# rpm -qf /etc/vsftpd/vsftpd.conf 
[root@xmh ~]# rpm -qf /usr/sbin/vsftpd

//查询未安装的软件包会产⽣哪些⽂件 
[root@xmh ~]# rpm -qlp /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

//查询未安装的软件包会产⽣哪些⽂件
[root@xmh ~]# rpm -qip /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm

1.4RPM包升级

-U 如果⽼版本不存在,就全新安装,如果存在有新版即升级
-f ⽼版本必须存在,才升级

//如果有新版则升级, 软件升级不要跨操作系统主版本号
[root@xmh ~]# rpm -Uvh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm

1.5RPM包卸载

卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则 会造成系统崩溃。

//先查询, 然后卸载 
[root@xmh ~]# rpm -qa |grep zsh 
[root@xmh ~]# rpm -e zsh --nodeps
[root@xmh ~]# rpm -e zsh

1.6RPM包校验

软件相关的数据库存放于/var/lib/rpm⽬录

[root@xmh ~]# rpm -V vsftpd
SM5....T.  c /etc/vsftpd/user_list

S #⽂件的容量⼤⼩是否被改变 
M #⽂件的类型或者⽂件的属性是否被修改 
5 #MD5这⼀种指纹加密的内容已经不同 
D #装置的主/次代码已经改变 
L #路径已经被改变 
U #⽂件的所属主已被修改 
G #⽂件的所属组已被修改 
T #⽂件的创建时间已被改变

以上是关于Linux系统之RPM包管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux程序包管理之rpm

谢烟客---------Linux之程序包管理rpm使用

Linux系列教程——Linux软件包管理之RPM命令

linux复习基础之软件管理

Linux 包管理工具之RPM详解

linux程序包管理之rpm程序包管理器与yum前端工具