centos下卸载rpm包

rpm -qa|grep sphinx

rpm -e sphinx.....

安全地卸载

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

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

1. 检查依赖(Denpendency)

检查依赖的目的,在于确保当前没有任何软件包依赖于当前要卸载的软件包。

2. 执行卸载前触发脚本程序(Triggerun)

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

本程序为软件包制作者设定,完成卸载前的一些工作,具体如,要卸载的软件包中某个

程序当前正在运行时,脚本程序必须杀掉它,否则无法正确卸载。

4. 检查配置文件(Configfiles)

RPM卸载软件包前会检查包中的配置文件是否修改了,如果修改了,RPM要换个名字保存

该文件,文件名一般是“原文件名+.rpmsave”。(这是RPM软件包管理的特色之一)

5. 真正卸载

即按照软件包中的文件列表,将文件逐个删除。要注意的是,如果其中有文件属于别的

软件包(即两个软件包拥有一个名字相同的文件),则RPM并不删除。

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

本程序主要是完成卸载的善后工作,如将系统配置文件inetd.conf修改一下,去掉安装

时添加的东西等等。

7. 更新RPM数据库

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

8. 执行卸载后触发脚本程序(Triggerpostun)

命令格式

<ccid_nobr>

<ccid_code>rpm -e [卸载选项1 卸载选项2...] [软件包标识1 软件包标识2...]

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

软件包标识

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

<ccid_nobr>

<ccid_code>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等等。

选项列表

通用选项的解释,请参见<<RPM应用之安装篇>>,本文不再赘述。

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

1. --test : 卸载测试

RPM的卸载测试做些什么?主要是检查依赖关系,确保系统中没有软件包依赖于要卸载的软件包。如果还有软件包依赖要卸载的软件包,则RPM会提示依赖关系将中断的错误,例如:

<ccid_nobr>

<ccid_code># 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
#

当然,我们通过浏览卸载测试时输出的调试信息就知道得更清楚了。

<ccid_nobr>

<ccid_code># 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行: 本行是卸载后触发脚本程序的执行结果;

第12行: 删除软件包在数据库中的信息。

2. --nodeps : 不检查依赖

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

<ccid_nobr>

<ccid_code># rpm -e --test --nodeps mktemp
#

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

3. --noscripts : 不执行脚本程序

一个RPM软件包中可包含五种脚本程序,即:安装前脚本程序,安装后脚本程序,卸载前脚本程序,卸载后脚本程序和校验脚本程序。卸载时使用--noscripts选项,可禁止卸载前与卸载后脚本程序的执行。

注意: 一般用户不要使用此选项。此选项主要提供给软件包制作者使用的。通过禁止执行脚本程序,可以防止因安装带有BUG的软件包而宕掉整个系统。当软件包去掉了BUG后,此选项就不必使用了。

4. --notriggers : 不执行触发程序

为了软件包间的交互控制,RPM设计了三种触发程序:安装时触发程序,卸载前触发程序和卸载后触发程序。为了防止因某一软件包的卸载而引发卸载前与卸载后触发程序的执行,可以使用--notriggers选项。通过比较下一例子与第1个选项介绍中的例子的输出,就可看到:选择--notriggers选项后,卸载前与卸载后触发程序都没有被触发执行。

<ccid_nobr>

<ccid_code># 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/bin/file action: remove
8 D: removing database entry
5. --allmatches : 卸载所有匹配的包

RPM可将同一软件的不同版本安装到系统中,这样如果想全部卸载掉,这时仅简单输软件名是不行的,将出现错误,如:

<ccid_nobr>

<ccid_code># 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。

怎样才能全部卸载呢?

答案之一是一个一个卸载,卸载时输入软件包标识,因为软件名相同,所以最少再输个版本号,这种情况适用于软件版本少的时候。

<ccid_nobr>

<ccid_code># rpm -e --allmatches foo
# rpm -q foo
package foo is not installed
#

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

6. --justdb : 仅修改数据库

使用本选项后,RPM将只更新其数据库,文件系统不更新,意即如果软件包安装有文件的话,卸载后这些文件照样存<ccid_nobr>

<ccid_code># rpm -ql file
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# ls -l /usr/bin/file
-rwxr-xr-x 1 root root23948 Mar 23 1999 /usr/bin/file
# rpm -e --justdb file
# ls -l /usr/bin/file
-rwxr-xr-x 1 root root23948 Mar 23 1999 /usr/bin/file
#

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

时间: 2024-10-25 18:08:49

centos下卸载rpm包的相关文章

centos下查看rpm包安装位置

1.如何安装rpm软件包 rpm -ivh your-package.rpm其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前目录下. 2.如何卸载rpm软件包使用命令 rpm -e 包名,包名可以包含版本号等信息,但是不可以有后缀.rpm 3.如何查看与rpm包相关的文件和其他信息 rpm -qa |grep vsftpd 4.如何获得某个软件包的文件全名rpm -q vsftpd可以获得系统中安装的mysql软件包全名5.查看一个rpm包中的文件安装到那里去了?r

centos下利用rpm包安装mysql

安装mysql步骤: 第一. http://www.mysql.com/downloads/mysql-4.0.html下载MySQL-client-5.0.96-1.glibc23.x86_64.rpm和 MySQL-server-5.0.96-1.glibc23.x86_64.rpm 第二.安装服务端: [[email protected] mysql]# rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm 显示信息: Preparing...  

Linux /centos 下nginx rpm包安装及配置

Centos下安装nginx rpm包                                                                                                                            www.169it.com 1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/c

linux下正确卸载rpm包

linux下正确卸载rpm包 rpm -qa | grep -i ntp 执行结果: [[email protected] elasticsearch-head]# rpm -qa | grep -i ntp fontpackages-filesystem-1.44-8.el7.noarch 卸载: yum remove fontpackages-filesystem-1.44-8.el7.noarch -y 原文地址:https://www.cnblogs.com/effortsing/p/1

卸载RPM包时报错specifies multiple packages

1.在卸载rpm包时报错如下 [[email protected] ~]# rpm -e cyrus-sasl-lib-2.1.22-4 error: "cyrus-sasl-lib-2.1.22-4" specifies multiple packages 2.查找结果如下: [[email protected] ~]# rpm -qa |grep cyrus-sasl-lib cyrus-sasl-lib-2.1.22-4 cyrus-sasl-lib-2.1.22-4 [[ema

关于CentOS下 yum包下载下的rpm包放置路径

http://blog.sina.com.cn/s/blog_4e928c170100xxdj.html 在CentOS下用yum安装,回发现在/var/cache/yum/下的base.extrs和updates下的packages下都没有发现下载的RPM 原来在/etc/yum.conf下没有设置下载选项 keepcache=0为下载后清除 keepcache=1为下载后保存

卸载rpm包遭遇error: xxx specifies multiple packages

一.环境 # lsb_release -aLSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarchDistributor ID: CentOSDescription:    CentOS release 5

centos7下使用rpm包安装clickhouse

clickhouse是由俄罗斯Yandex公司开发的列式存储数据库,于2016年开源,clickhouse的定位是快速的数据分析,对于处理海量数据的情况性能非常好,在网上也有很多测试的案例,在大数据的情况下性能远超过其他数据库,并且不依赖于hadoop的生态系统,都是独立使用,在大数据存储业务上还是可以考虑的. clickhouse官网地址:https://clickhouse.yandex/,文档地址:https://clickhouse.yandex/docs/en/ 另外推荐单页文档,更方

在断网状态下安装rpm包

实验平台:CentOS7 实验分析:linux系统中的源rpm包存储在官方的yum仓库中,平时我们在联网状态下可以随心调用yum仓库中的rpm包,而在断网状态下,这一切显然是不可能实现的.如果我们需要安装rpm包,只能自己建立一个临时的yum仓库,而这就要依赖linux操作系统的安装镜像.很明显,安装镜像中存储了大量的rpm包,只不过相比网络中的yum仓库,镜像中的rpm包不能随时升级,更新版本等. rpm包概述 rpm包是各种Linux发行版本中应用最广泛的软件包之一,rpm包以其强大的功能和