【Linux】Linux安装管理02 RPM包管理

RPM包的来源

所有RPM包都来自安装系统光盘的Packages目录中


RPM包命名规则

img

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


RPM包依赖性

  1. 树形依赖:a->b->c 解决方法:从后往前安装
  2. 环形依赖:a->b->c->a 解决方法:放在一条命令中安装即可
  3. 模块依赖:库文件依赖,库也叫模块,就是linux当中的函数,它有一个典型的特征,就是以.so.数字结尾,它依赖的其实是一个文件,而不是软件包。该文件藏身在某一个软件包当中。我们只要将该文件所在的软件包安装上,该文件也就安装了。解决方法:登录www.rpmfind.net 网站,输入库文件名称查询到对应的rpm包,然后安装即可。


RPM安装

1
2
3
4
5
rpm -ivh 包全名
# -i (install)安装
# -v(verbose)显示详细信息
# -h(hash)显示进度
# --nodeps不检测依赖性(一般不用)


RPM 升级

1
2
rpm -Uvh 包全名
# -U(update)升级
  • 需要包全名,而不是包名。可以如此理解:升级时的新包对于系统是新的,因此要包全名
  • 如果这个包从来没有安装过,那么效果等同于rpm -ivh 包全名


RPM卸载

1
2
3
rpm -e 包名
# -e(erase)卸载
# --nodeps 不检查依赖性
  • rpm准备了这个卸载命令的原因是,我们安装时根本不知道这个包装了在哪里(要知道linux下的安装的软件的文件散布多个地方的,很难一一找),而rpm知道,所以干脆就为我们准备了这条便利的命令。
  • window下卸载软件,往往容易留很多垃圾数据难以除完,例如注册表等等。而linux中不会出现这个问题,只要把软件的安装目录所有都删除掉,就不会有残留。


RPM包查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
rpm -q 包名
# 查询包是否安装
# -q 查询(query)
rpm -qa 包名
# 查询所有已经安装的RPM包
# -a 所有(all)
# rpm -qa | grep httpd
rpm -qi 包名
# 查询软件包详细信息
# -i (infomation) : 查询软件信息
rpm -qip 包全名
# -p (package) : 查询未安装报信息
# 有时遇到问题, 可根据未安装包信息中所提供的网站进行查询资料
rpm -ql 包名
# 查询包中文件安装位置
# -l (list) : 列表
# -p (package) : 查询未安装包信息
# 可查看包作者欲将包安装的位置
rpm -qf 系统文件名
# -f (file) : 查询系统文件属于哪个软件包
# 查询系统文件属于哪个 RPM 包
# 该文件必须是通过 RPM 包安装的
rpm -qR 包名
# 查询软件包的依赖性
# -R (requires) : 查询软件包的依赖性
# -p (package) : 查询未安装包的信息

RPM包默认安装位置


RPM包校验

1
2
3
4
rpm -V 已安装的包名
# -V (verify) : 校验指定RPM包中的文件
# 执行后, 无任何提示, 代表该文件没有被做任何修改
# 判断本地的安装包与官方给出的是否一致, 从而判断是否被人修改

验证内容中的8个信息

  • S : 文件大小是否改变
  • M : 文件的类型或文件的权限( rwx )是否被改变
  • 5 : 文件MD5 校验和是否改变( 可以看成文件内容是否改变 )
  • D : 设备的主从代码是否改变
  • L : 文件路径是否改变
  • U : 文件的属主( 所有者 ) 是否改变
  • G : 文件的属组是否改变
  • T : 文件的修改时间是否改变

验证内容中的文件类型

  • c (config file) : 配置文件
  • d (documentation) : 普通文档
  • g (ghost file) : “鬼”文件, 很少见, 就是该文件不应该被这个RPM包包含
  • L (license file) : 授权文件
  • r (read me) : 描述文件

MD5校验

用来校验文件的完整性(文件内容是否被改变)

例如, 在官网下载的游戏, 官方会给出MD5校验码, 将下载的游戏通过专用的MD5校验工具校验后生成一份MD5校验码, 对比两份校验码是否一致, 不一致则说明,下载的文件可能丢包, 可能文件损坏, 可能被其他人动过手脚一直木马等


RPM包中的文件提取

1
rpm2cpio 包全名 | cpio -idv .文件绝对路径
  • 前面的.代表当前路径,不能省略。
  • 文件绝对路径和包里文件的绝对路径对应,也就是告诉了cpio要去包里提取哪个文件。
  • cpio只知道提取文件,并不知道要从什么地方提取文件,因此我们通常要使用|管道符或<输入重定向告诉cpio我们应该从什么设备去取出文件。
1
2
3
4
5
cpio 选项 < [文件|设备]
# 使用输入重定向的cpio
# -i:copy-in模式,还原
# -d:还原时自动新建目录
# -v:显示还原过程