`
晨星★~雨泪
  • 浏览: 448176 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

RPM安全地卸载

阅读更多
RPM安全地卸载
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)

命令格式
复制内容到剪贴板
代码:
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等等。

选项列表
+--------------------------------+
|          指定选项                  |
+--------------------------------+
|--test       | 卸载测试            |
|--nodeps     | 不检查依赖          |
|--noscripts  | 不执行脚本程序      |
|--notriggers | 不执行触发程序      |
|--allmatches | 卸载所有匹配包      |
|--justdb     | 仅修改数据库        |
+-------------+------------------+
|          通用选项                  |
+--------------------------------+
|-v           | 显示附加信息        |
|--v          | 显示调试信息        |
|--root 目录   | 指定根目录          |
|--rcfile 文件 | 指定RPM资源配置文件|
|--dbpath 目录 | 指定RPM数据库目录  |
+-------------+------------------+

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

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行: 本行是卸载后触发脚本程序的执行结果;
第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/bin/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。
怎样才能全部卸载呢?
答案之一:是一个一个卸载,卸载时输入软件包标识,因为软件名相同,所以最少再输个版本号,这种情况适用于软件版本少的时候。
复制内容到剪贴板
代码:
# rpm -e --allmatches foo
# rpm -q foo
package foo is not installed
卸载过程没有出现错误,之后再查询foo包,RPM则提示软件包未安装。
答案之二:Linux现在很多方面类似Windows了,在X-Windows里面,有控制面板,找到安装卸载程序就可以自动完成了。
    不过,答案二显得不怎么Linux/Unix——个人感觉。

6. --justdb : 仅修改数据库
使用本选项后,RPM将只更新其数据库,文件系统不更新,意即如果软件包安装有文件的话,卸载后这些文件照样存
复制内容到剪贴板
代码:
# 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,可以看到该文件依然存在。
分享到:
评论

相关推荐

    pcre-8.40的rpm包

    理解RPM包的依赖关系,能帮助我们更好地维护系统的稳定性和安全性。同时,熟悉正则表达式可以极大地提高文本处理的效率,尤其在日志分析、脚本编程等领域。总的来说,无论是对PCRE库的理解,还是对RPM包管理的运用,...

    教您如何快速在Linux系统中卸载软件

    ### 教您如何快速在Linux系统中卸载软件 #### 概述 本文将详细介绍如何在Linux操作系统上高效地卸载软件。...通过掌握这些技巧,可以帮助用户更加有效地管理自己的Linux系统,确保其运行顺畅、安全。

    rpm包的安装、删除、效验、查询

    ### rpm包的安装、删除、效验、...掌握这些基本操作对于Linux用户来说至关重要,特别是对于系统管理员而言,熟练运用rpm能够显著提高工作效率并保障系统的稳定性与安全性。希望本文能帮助您更好地理解和应用rpm命令。

    openssl-1.1.1m centos 7 rpm

    RPM(Red Hat Package Manager)是基于 Linux 的软件包管理器,用于简化软件的安装、升级和卸载过程。 标题中的 "openssl-1.1.1m centos 7 rpm" 指的是将 OpenSSL 版本 1.1.1m 通过 RPM 包的形式安装在 CentOS 7 上...

    卸载redhat6.3自带的mysql 绝对成功

    ### 卸载RedHat 6.3 自带的MySQL:绝对成功 ...正确地执行上述步骤能够确保MySQL被安全地卸载,同时不会影响系统的其他部分。这对于未来重新安装MySQL或其他数据库系统来说至关重要,可以避免潜在的冲突和兼容性问题。

    RPM Builder 将tar.gz 转成RPM

    在Linux和类Unix系统中,RPM(Red Hat Package Manager)是一种广泛使用的软件包管理器,它能够方便地安装、升级、查询和卸载软件。RPM Builder 是一个工具,可以帮助用户将源代码的tar.gz文件转换为RPM格式的软件包...

    rpm 4.11.3 版本升级

    RPM(Red Hat Package Manager)是Linux系统中广泛使用的软件包管理器,它负责软件的安装、升级、查询、验证和卸载等操作。RPM 4.11.3 是一个重要的版本更新,它提供了许多改进和修复,旨在提高系统的稳定性和性能。...

    RPM 五种基本的操作方式

    RPM(Red Hat Package Manager)是Linux系统中广泛使用的软件包管理工具,它允许用户方便地安装、卸载、升级和查询软件包。RPM的基本操作主要包括五个方面:安装、卸载、升级、查询和验证。 一、安装RPM包 安装RPM...

    php 7.2.16 rpm包

    通过RPM包,用户无需手动编译源代码,可以方便地进行安装、升级和卸载操作。 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。PHP 7.2系列是PHP的一个重要分支,引入了...

    gcc、openssl rpm文件包

    通过RPM,用户可以方便地安装、升级、查询和卸载软件,同时RPM会处理软件的依赖性问题,确保安装的软件能正常运行。 在Linux环境下,GCC和OpenSSL经常一起出现,因为OpenSSL是一个强大的安全套接层(SSL)和传输层...

    linuxRPM包管理及linux for QQ的安装过程

    Linux RPM 包管理及 Linux for QQ 的安装过程 Linux RPM 包管理是 Linux 操作系统中的一种软件包管理机制,...通过这些命令,可以对 Linux 应用程序进行安装、卸载和管理,提高 Linux 操作系统的管理效率和安全性。

    telnet的rpm包

    2. **SCP(Secure Copy)**:用于安全地在远程主机之间复制文件。 总结,`telnet`的`rpm`包为Linux用户提供了一种快速便捷的方式来安装和管理`telnet`服务。然而,鉴于安全考虑,建议在生产环境中优先考虑使用SSH等...

    OpenSSH通过RPM升级到9.6

    RPM是Linux发行版如Fedora、CentOS或RHEL中广泛使用的包管理工具,它可以方便地安装、升级、查询和卸载软件包。 在Linux环境中,升级OpenSSH到最新版本通常是出于安全性和功能性的考虑,因为新版本通常会修复已知的...

    mysql安装和卸载

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和...通过以上步骤,你应该能够顺利地在你的系统上安装和卸载MySQL了。记得在实际操作中遵循最佳实践,确保数据库系统的稳定性和安全性。

    centos6 openssh9.4rpm包

    2. **RPM包**: RPM是Red Hat Package Manager的缩写,是一种广泛用于Linux发行版的软件包管理系统,用于安装、升级、查询和卸载软件。RPM包是预编译的二进制文件,可以直接在支持RPM的系统上安装。 3. **CentOS 6**...

    glibc2.14.1 rpm安装包

    RPM(Red Hat Package Manager)是一种广泛用于Linux发行版的软件包管理系统,它能够自动化软件的安装、升级、查询和卸载过程。glibc2.14.1的RPM安装包意味着用户只需一行命令`rpm -ivh`即可完成安装,避免了编译源...

    openssh7.9p1的rpm包。安全加固用的

    RPM包是预编译的软件,包含了运行所需的所有依赖项,使得用户能够轻松安装、升级或卸载软件。 在标题中提到的"openssh7.9p1的rpm包",意味着这是一个用于安装OpenSSH 7.9p1的RPM软件包,主要目的是为了系统的安全...

    openssh-9.5p1 RPM安装包

    首先,我们需要了解RPM(Red Hat Package Manager),这是一种在Linux发行版中广泛使用的软件包管理器,它负责软件的安装、升级和卸载。"openssh-9.5p1 RPM安装包"就是按照RPM格式封装的OpenSSH 9.5p1版本,适用于...

    精通rpm,rpm命令的使用

    ### 精通RPM:全面解析RPM命令及其应用 ...通过掌握RPM的基本操作和高级应用,用户不仅可以高效地管理软件包,还能提升整个系统的稳定性和安全性。希望以上内容能帮助读者更好地理解和运用RPM命令。

Global site tag (gtag.js) - Google Analytics