可以先用rpm-q'xxx'或则rpm-qf'xxx/bin/xxxx.xx'来查询一下所属的rpm包的名子。
之后用rpm-e'xxxxxx'来删之。
'xxx/bin/xxxx.xx'是一个包中任意的文件
'xxxxxx'是查询得到的rpm包的名称
rpm-e的时侯旁边的文件名不用加版本号
详尽说明:
安全地卸载
RPM卸载软件包,并不是简单地将原先安装的文件挨个删掉,那样做的话,可能会出现这样或那样的问题。如,A软件包借助B软件包做个别工作,若B软件包卸载了,则A软件包就不能正常运行了。RPM为用户安全考虑,会做个别检测,尽可能排除出错的情况。
RPM在卸载软件包时,分步骤进行如下操作:
1.检测依赖(Denpendency)
检测依赖的目的,在于确保当前没有任何软件包依赖于当前要卸载的软件包。
2.执行卸载前触发脚本程序(Triggerun)
3.执行卸载前脚本程序(Preuninstall)
本程序为软件包制做者设定linux数据恢复,完成卸载前的一些工作行转列 linux行转列 linuxlinux培训学校,具体如,要卸载的软件包中某个
程序当前正在运行时,脚本程序必须杀掉它,否则难以正确卸载。
4.检测配置文件(Configfiles)
RPM卸载软件包前会检测包中的配置文件是否更改了,假如更改了,RPM要换个名子保存
该文件,文件名通常是“原文件名+.rpmsave”。(这是RPM软件包管理的特色之一)
5.真正卸载
即根据软件包中的文件列表,将文件挨个删掉。要注意的是,倘若其中有文件属于别的
软件包(即两个软件包拥有一个名子相同的文件),则RPM并不删掉。
6.执行卸载后脚本程序(Postuninstall)
本程序主要是完成卸载的善后工作,如将系统配置文件inetd.conf更改一下,去除安装
时添加的东西等等。
7.更新RPM数据库
卸载后,RPM删掉该软件包在数据库中的所有信息。
8.执行卸载后触发脚本程序(Triggerpostun)
命令格式
卸载RPM格式的软件包,可使用如下命令格式:
rpm-e[卸载选项1卸载选项2...][软件包标示1软件包标示2...]
注:也可使用--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--testmktemp
error:removingthesepackageswouldbreakdependencies:
mktempisneededbyautoconf-2.13-5
mktempisneededbydev-2.7.7-4BP
mktempisneededbygroff-1.11a-10BP
mktempisneededbygzip-1.2.4-15BP
mktempisneededbyinitscripts-4.16-3BP
mktempisneededbymetamail-2.7-21BP
mktempisneededbyrpm-3.0.3-4BP
mktempisneededbyautofs-3.1.3-2
/bin/mktempisneededbyapache-1.3.12-5BP
/bin/mktempisneededbylinuxconf-1.16r1.3-4BP
其实,我们通过浏览卸载测试时输出的调试信息就晓得得更清楚了。
#rpm-e--test-vvfile|nl
1D:openingdatabasemode0x0in//var/lib/rpm/
2D:gettinglistofmountedfilesystems
3+echotriggeruninstall
4triggeruninstall
5D:willremovefilestest=1
6D:file:/usr/share/magicaction:remove
7D:file:/usr/man/man4/magic.4action:remove
8D:file:/usr/man/man1/file.1action:remove
9D:file:/usr/bin/fileaction:remove
10+echotriggerpostuninstall
11triggerpostuninstall
12D:removingdatabaseentry
注:本例进行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--nodepsmktemp
须要说明的是,除非用户对软件包有足够了解,否则不要使用本选项,最好让RPM手动维护软件间的依赖关系,确保其能正常运行。
3.--noscripts:不执行脚本程序
一个RPM软件包中可包含五种脚本程序,即:安装前脚本程序,安装后脚本程序,卸载前脚本程序,卸载后脚本程序和校准脚本程序。卸载时使用--noscripts选项,可严禁卸载前与卸载后脚本程序的执行。
注意:通常用户不要使用此选项。此选项主要提供给软件包制做者使用的。通过严禁执行脚本程序,可以避免因安装带有BUG的软件包而宕掉整个系统。当软件包除去了BUG后,此选项就毋须使用了。
4.--notriggers:不执行触发程序
为了软件包厢的交互控制,RPM设计了三种触发程序:安装时触发程序,卸载前触发程序和卸载后触发程序。为了避免因某一软件包的卸载而引起卸载前与卸载后触发程序的执行,可以使用--notriggers选项。通过比较下一事例与第1个选项介绍中的反例的输出,就可见到:选择--notriggers选项后,卸载前与卸载后触发程序都没有被触发执行。
#rpm-e--test-vv--notriggersfile|nl
1D:openingdatabasemode0x0in//var/lib/rpm/
2D:gettinglistofmountedfilesystems
3D:willremovefilestest=1
4D:file:/usr/share/magicaction:remove
5D:file:/usr/man/man4/magic.4action:remove
6D:file:/usr/man/man1/file.1action:remove
7D:file:/usr/bin/fileaction:remove
8D:removingdatabaseentry
5.--allmatches:卸载所有匹配的包
RPM可将同一软件的不同版本安装到系统中,这样假如想全部卸载掉,这时仅简单输软件名是不行的,将出现错误,如:
#rpm-qfoo
foo-6.0-1
foo-7.0-1
#rpm-efoo
error:"foo"specifiesmultiplepackages
注:本例中先查询foo包,发觉有6.0和7.0版两个版本,接着卸载foo包,出现错误:有多个软件包的名子均为foo。
如何能够全部卸载呢?
答案之一是一个一个卸载,卸载时输入软件包标示,由于软件名相同,所以最少再输个版本号,这些情况适用于软件版本少的时侯。
答案之二是使用--allmatches选项,仅输个软件名即可,指示RPM卸载所有匹配的包,比较便捷。
#rpm-e--allmatchesfoo
#rpm-qfoo
packagefooisnotinstalled
卸载过程没有出现错误,然后再查询foo包,RPM则提示软件包未安装。
6.--justdb:仅更改数据库
使用本选项后,RPM将只更新其数据库,文件系统不更新,意即假如软件包安装有文件的话,卸载后这种文件照样存在。
#rpm-qlfile
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
#ls-l/usr/bin/file
-rwxr-xr-x1rootroot23948Mar231999/usr/bin/file
#rpm-e--justdbfile
#ls-l/usr/bin/file
-rwxr-xr-x1rootroot23948Mar231999/usr/bin/file