首页 > 编程知识 正文

使用什么命令卸载rpm软件包,卸载已安装的rpm包

时间:2023-05-05 09:06:48 阅读:21052 作者:678

安全卸载

RPM卸载软件包不仅会一次删除一个原始安装的文件,而且这样做可能会导致各种问题。 例如,如果a软件包依赖于b软件包,则卸载b软件包将导致a软件包无法正常工作。 为了用户的安全,RPM将进行一些检查以尽可能排除错误。

卸载软件包时,RPM分步骤执行以下操作:

1 .依赖检查(Denpendency ) )。

检查依赖关系的目的是确保没有软件包依赖于当前卸载的软件包。

2 .运行卸载前启动脚本的程序(Triggerun )

3 .运行卸载前脚本程序(Preuninstall )

此程序是为软件包创建者设置的,将完成卸载前的工作。 具体来说,它可以是要卸载的软件包之一

如果程序当前正在运行,脚本程序必须将其杀死。 否则,无法正确卸载。

4 .配置文件检查(Configfiles ) )。

RPM在卸载软件包之前检查软件包中的配置文件是否已更改,如果已更改,则将其重命名并保存

此文件的文件名通常为“原始文件名. rpmsave”。 (这是RPM软件包管理的特色之一。)

5 .真的卸载

按照包中的文件列表一次删除一个文件。 需要注意的是,如果其中有其他文件

如果软件包(即两个软件包)具有相同名称的文件,则不会删除RPM。

6 .运行卸载后的脚本程序(Postuninstall )

该程序主要完成卸载的善后工作,例如修改系统配置文件inetd.conf,以删除安装

有时追加的东西等。

7 .更新rpm数据库

卸载后,RPM将删除软件包数据库中的所有信息。

8 .运行卸载后启动脚本的程序(Triggerpostun )

命令格式

要卸载RPM格式的软件包,请使用以下命令格式:

rpm -e [卸载选项1卸载选项2.] [软件包id1软件包2.]

注:也可以使用--erase代替:--e,但效果相同。

软件包识别

对于已安装的软件包,RPM使用以下格式唯一标识:

name [-subname ] -版本-版本

其中: Name:指软件名称;

Subname :本款可选,是指软包的名称;

版本:是软件的版本号。不能包含减号(-)。

Release :是指软件版本号。

例如,如果安装了:包装文件file-3.26-6.i386.rpm,则该软件包被标识为file-3.26-6。 使用此标记可以卸载、查询和验证软件包。 在命令行中输入包id时,可以完全书写,也可以用缩写形式书写。 如果是file-3.26-6,则为file、file-3.26或完全失败。 此外,带:子包的包标识符XFree86-devel-3.3.6-6不仅可以输入XFree86-devel,也可以输入XFree86-devel-3.3.6

请注意,包id区分大小写。 也就是说,大小写表示不同的意思。 例如,bash-2.03-10标识不能输给bash-2.03-10,不能输给bash-2.03-10等。

选项列表

选择详细信息

以下,对指定用选项进行说明:

1. --test :卸载测试

RPM卸载测试做什么? 主要检查依赖关系,以确保系统中没有软件包依赖于要卸载的软件包。 如果某些软件包依赖于要卸载的软件包,RPM会通知相关性中断的错误,例如:

# rpm -e --test mktemp

error : removingthesepackageswouldbreakdependencies 3360

mktempisneededbyautoconf-2.13-5

mktemp is needed by dev-2.7.7-4BP

mktempisneededbygroff-1.11 a-10bp

mktemp is needed by gzip-1.2.4-15bp

mtempisneededbyinitscripts-4.16-3bp

mtempisneededbymetamail-2.7-21bp

mktemp is needed by rpm-3.0.3-4BP

mktemp is needed by autofs-3.1.3-2

/平静的小海豚/mktempisneededbyapache-1.3.12-5bp

/平静的小海豚/mktempisneededbylinuxconf-1.16 r 1.3-4bp

#

当然,通过查看卸载测试时输出的调试信息,会更加清晰。

# rpm-e-- test-vv文件| nl

1d : openingdatabasemode0x0in//var/lib/rpm /

2d : gettinglistofmountedfilesystems

3 echo触发器uninstall

4触发装置uninstall

5 D: will remove f

iles 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/稳重的小海豚/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行: 本行是卸载后触发脚本程序的执行结果;
第12行: 删除软件包在数据库中的信息。

2. --nodeps : 不检查依赖
RPM 管理软件包,不仅管理包中的所有文件,还同时管理着软件包之间的依赖关系。如A依赖于B运行,若B不存在了,则A也就运行不了了。RPM维护着这种关系, 尽量避免破坏,以保证软件的正常运行。上例进行mktemp包的卸载测试时,RPM提示了中断依赖关系的错误。如果使用本选项,不检查依赖,则卸载测试会顺利完成。
# rpm -e --test --nodeps mktemp
#

需要说明的是,除非用户对软件包有足够了解,否则不要使用本选项,最好让RPM自动维护软件间的依赖关系,确保其能正常运行。

3. --noscripts : 不执行脚本程序
一个RPM软件包中可包含五种脚本程序,即:安装前脚本程序,安装后脚本程序,卸载前脚本程序,卸载后脚本程序和校验脚本程序。卸载时使用--noscripts选项,可禁止卸载前与卸载后脚本程序的执行。
注意: 一般用户不要使用此选项。此选项主要提供给软件包制作者使用的。通过禁止执行脚本程序,可以防止因安装带有BUG的软件包而宕掉整个系统。当软件包去掉了BUG后,此选项就不必使用了。

4. --notriggers : 不执行触发程序
为了软件包间的交互控制,RPM设计了三种触发程序:安装时触发程序,卸载前触发程序和卸载后触发程序。为了防止因某一软件包的卸载而引发卸载前与卸载后触发程序的执行,可以使用--notriggers选项。通过比较下一例子与第1个选项介绍中的例子的输出,就可看到:选择--notriggers选项后,卸载前与卸载后触发程序都没有被触发执行。
# rpm -e --test -vv --notriggers file | nl
1 D: opening database mode 0x0 in //var/lib/rpm/
2 D: getting list of mounted filesystems
3 D: will remove files test = 1
4 D:file: /usr/share/magic action: remove
5 D:file: /usr/man/man4/magic.4 action: remove
6 D:file: /usr/man/man1/file.1 action: remove
7 D:file: /usr/稳重的小海豚/file action: remove
8 D: removing database entry

5. --allmatches : 卸载所有匹配的包

RPM可将同一软件的不同版本安装到系统中,这样如果想全部卸载掉,这时仅简单输软件名是不行的,将出现错误,如:
# rpm -q foo
foo-6.0-1
foo-7.0-1
# rpm -e foo
error: "foo" specifies multiple packages
#

注: 本例中先查询foo包,发现有6.0和7.0版两个版本,接着卸载foo包,出现错误: 有多个软件包的名字均为foo。
怎样才能全部卸载呢?
答案之一是一个一个卸载,卸载时输入软件包标识,因为软件名相同,所以最少再输个版本号,这种情况适用于软件版本少的时候。
答案之二是使用--allmatches选项,仅输个软件名即可,指示RPM卸载所有匹配的包,比较方便。
# rpm -e --allmatches foo
# rpm -q foo
package foo is not installed
#

卸载过程没有出现错误,之后再查询foo包,RPM则提示软件包未安装。

6. --justdb : 仅修改数据库
使用本选项后,RPM将只更新其数据库,文件系统不更新,意即如果软件包安装有文件的话,卸载后这些文件照样存在。
# rpm -ql file
/usr/稳重的小海豚/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# ls -l /usr/稳重的小海豚/file
-rwxr-xr-x 1 root root23948 Mar 23 1999 /usr/稳重的小海豚/file
# rpm -e --justdb file
# ls -l /usr/稳重的小海豚/file
-rwxr-xr-x 1 root root23948 Mar 23 1999 /usr/稳重的小海豚/file
#

注: 本例先用rpm -ql查询得到file包的文件列表,再用ls命令列包中的一个文件/usr/稳重的小海豚/file,能列出信息,故文件存在。然后用rpm -e --justdb卸载file包但只更新数据库,而后再用ls命令列/usr/稳重的小海豚/file,可以看到该文件依然存在。[@more@]RPM 卸载

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8570952/viewspace-982588/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8570952/viewspace-982588/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。