rpm包卸载后出现:很多文件名都是自己变了.rpmsave

在这里插入图片描述

在这里插入图片描述
原因就是我和老师的聊天中了。
老师说他也遇到过。

但是导致出现这种问题的原因有很多,还很难解决,重装或者(如果是使用虚拟机的话)还原快照是最好的方法

这也是我在网上找了很久的博客才找到的,分析出来自己的原因。

那么记录一下吧

参照博客:https://www.kafan.cn/edu/8064106.html

rpm卸载参数:
–test 卸载测试
–nodeps 不检查依赖
–noscripts 不执行脚本程序
–nosriggers 不执行触发机制
–justdb 仅修改数据
–force 强制

rpm卸载软件包并不是简单地将原来安装的文件逐个删除,那样做的话,可能会出现这样或那样的问题。比如A软件包依靠B软件包做某些工作,如果B软件包卸载了,则A软件包就不能正常运行了。rpm为用户安全考虑会做某些检查,尽可能排除出错的情况。

rpm在卸载软件包时,分步骤进行如下操作:

1.检查依赖
检查依赖的目的在于确保1当前没有任何软件包依赖于当前要卸载的软件包
2.执行卸载前触发脚本程序
3.执行卸载当前脚本程序
本程序为软件包制作者设定,完成卸载前的一些工作,具体要卸载的包中某个程序当前正在运行它时,脚本程序必须杀掉它,否则无法正确卸载。
4.检查配置文件
rpm卸载软件包前会检查包中的配置文件是否修改了,如果修改了,rpm要换个名字保存该文件,文件名一般是“原文件名+.rpmsave”。(这是rpm软件包管理特色之一)

5.真正卸载
即按照软件包中的文件列表将文件逐个删除。要注意的是,如果有其他文件属于别的软件包(即这两个软件包拥有一个名字相同的文件),则rpm并不删除。

6.执行卸载后脚本程序
本程序主要是完成卸载的善后工作,比如将系统配置文件inetd.conf 修改一下(其实我试了一下,系统中没有找到这个文件),去掉安装时添加的东西等等。
7.更新rpm数据库
卸载后,rpm删除该软件包在数据库中的所有信息
8.执行卸载后出发脚本程序
rpm -e
也可以使用–erase 代替-e 效果相同

软件包标识
对于已经安装的软件包,rpm使用如下格式来唯一标识它:
Name[-Subname]-Version-Release
其中: Name: 指软件名;
Subname : 本项可选,指软件包子包的名字;
Version : 指软件版本号。注意:其中不能含减号(-)字符;
Release : 指软件释出号。
例如: 包裹文件file-3.26-6.i386.rpm安装后,其软件包标识为file-3.26-6。可以用此标识卸载,查询,校验该软件包。在命令行上输入软件包标识时,可以写全,也可以采用简写的方式。如file-3.26-6,可仅输入file,或file-3.26,或输全。又如: 带有子包的软件包标识XFree86-devel-3.3.6-6,可仅输入XFree86-devel,或XFree86-devel-3.3.6,还可完全输入。
注意: 软件包标识是大小写敏感的,即大写字母与小写字母表示不同的涵义。如bash-2.03-10标识不能输作Bash-2.03-10,也不能输作bAsh-2.03-10等等。

下面对指定用选项做些解释:

  1. –test : 卸载测试
    RPM的卸载测试做些什么?主要是检查依赖关系,确保系统中没有软件包依赖于要卸载的软件包。如果还有软件包依赖要卸载的软件包,则RPM会提示依赖关系将中断的错误,例如:
    rpm -e --test mktemp
    error: removing these packages would break dependencies:
    mktemp is needed by autoconf-2.13-5
    mktemp is needed by dev-2.7.7-4BP
    mktemp is needed by groff-1.11a-10BP
    mktemp is needed by gzip-1.2.4-15BP
    mktemp is needed by initscripts-4.16-3BP
    mktemp is needed by metamail-2.7-21BP
    mktemp is needed by rpm-3.0.3-4BP
    mktemp is needed by autofs-3.1.3-2
    /bin/mktemp is needed by apache-1.3.12-5BP
    /bin/mktemp is needed by linuxconf-1.16r1.3-4BP

当然,我们通过浏览卸载测试时输出的调试信息就知道得更清楚了。
rpm -e --test -vv file | nl
1 D: opening database mode 0x0 in //var/lib/rpm/
2 D: getting list of mounted filesystems
3 + echo triggeruninstall
4 triggeruninstall
5 D: will remove files test = 1
6 D:file: /usr/share/magic action: remove
7 D:file: /usr/man/man4/magic.4 action: remove
8 D:file: /usr/man/man1/file.1 action: remove
9 D:file: /usr/bin/file action: remove
10 + echo triggerpostuninstall
11 triggerpostuninstall
12 D: removing database entry
注: 本例进行file包的卸载测试,输出信息送管道交nl列出行号,现逐行解释。(行号后以D:开始的行输出的为调试信息)
第1行: 打开/var/lib/rpm目录下的RPM数据库;
第2行: 取已安装文件系统列表;
第3行: 执行卸载前触发脚本程序;
第4行: 这一行是卸载前触发脚本程序的执行结果;
第5行: RPM提示将要删除文件,其中test=1表明为卸载测试,并非真正删除;
第6-9行: 显示各文件的执行操作–删除;
第10行: 执行卸载后触发脚本程序;
第11行: 本行是卸载后触发脚本程序的执行结果;

博客地址
https://www.kafan.cn/edu/8064106.html

发布了198 篇原创文章 · 获赞 17 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42506599/article/details/104888018
今日推荐