`

怎样使用rpm命令一次性删除依赖的软件包

 
阅读更多

怎样使用rpm命令一次性删除依赖的软件包

搜索了一下网络,发现解法大体有两种:

第一种方法:不管依赖包

相互依赖的软件包,使用rpm的--nodeps参数就搞定了.
rpm --nodeps -e gdm-2.24.1-4.fc10.i386

man rpm 写道
       --nodeps
              Don’t check dependencies before uninstalling the packages.

也就是说不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。

 

第二种方法:手工添加依赖包到命令行

执行

    rpm -e 要删除的rpm包名称

然后根据输出再在命令行后面跟上依赖包名称

    rpm -e 要删除的rpm包名称 依赖的rpm包名称

这种方法是我以前也经常使用的,比如用于删除RHEL/CentOS中原装的jdk

 

下面演示这一步骤,比较烦,因为要删除的依赖包实在太多,要复制粘贴n次

[root@localhost ~]# java -version

java version "1.6.0_22" OpenJDK Runtime Environment (IcedTea6 1.10.4) (rhel-1.24.1.10.4.el5-i386) OpenJDK Server VM (build 20.0-b11, mixed mode)

[root@localhost ~]# rpm -qa | grep jdk

java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5

[root@localhost ~]# rpm -e java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5

error: Failed dependencies: jre >= 1.5.0 is needed by (installed) openoffice.org-ure-3.1.1-19.5.el5_5.6.i386

[root@localhost ~]# rpm -e java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 error: Failed dependencies: libjvmaccessgcc3.so.3 is needed by (installed) openoffice.org-core-3.1.1-19.5.el5_5.6.i386 libjvmaccessgcc3.so.3(UDK_3.1) is needed by (installed) openoffice.org-core-3.1.1-19.5.el5_5.6.i386

太多输出,省略

  by (installed) openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-ure = 1:3.1.1-19.5.el5_5.6 is needed by (installed) openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-ure = 1:3.1.1-19.5.el5_5.6 is needed by (installed) openoffice.org-draw-3.1.1-19.5.el5_5.6.i386

[root@localhost ~]# 有太多软件包需要删除,此处不再继续

[root@localhost ~]#

 

 

第三种方法:用脚本(当然:有可能写脚本比复制粘贴更难,前者是智力活,后者是体力活)

编写一个 force_remove_package.sh 的Bash脚本,内容如下:

 

#!/bin/sh

do_once()
{
        rpm -e "$@" 2>&1 | grep '(installed)'
}

for ((I=1; I<=4; ++I))
do
        DEPS="$DEPS $(do_once "$@" $DEPS | awk '{print $8}')"
        echo $I $DEPS
done

 

其中,

1. 用 for 循环进行有限次尝试 而不用 while true,那是为了防止编程死循环,别因为输入错误真的把系统里面所有的包都给删除了;

2. awk命令里面的 $8,是经过尝试出来的,因为 rpm -e 命令输出的信息中包含有很多空格;

3. rpm -e 的错误输出需要重定向到标准输出,否则就不会得到依赖包,而直接输出在终端上了。

 

 

用它来删除系统原装的jdk,输出如下:

[root@localhost setup]# ./force_remove_package.sh java-1.6.0-openjdk-1.6.0.0-1.24.1.10.4.el5 java-1.6.0-openjdk-devel-1.6.0.0-1.24.1.10.4.el5
1 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386
2 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 openoffice.org-core-3.1.1-19.5.el5_5.6.i386 openoffice.org-writer-3.1.1-19.5.el5_5.6.i386 openoffice.org-impress-3.1.1-19.5.el5_5.6.i386 openoffice.org-math-3.1.1-19.5.el5_5.6.i386 openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-draw-3.1.1-19.5.el5_5.6.i386
3 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 openoffice.org-core-3.1.1-19.5.el5_5.6.i386 openoffice.org-writer-3.1.1-19.5.el5_5.6.i386 openoffice.org-impress-3.1.1-19.5.el5_5.6.i386 openoffice.org-math-3.1.1-19.5.el5_5.6.i386 openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-draw-3.1.1-19.5.el5_5.6.i386 openoffice.org-xsltfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_TW-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_CN-3.1.1-19.5.el5_5.6.i386
4 openoffice.org-ure-3.1.1-19.5.el5_5.6.i386 openoffice.org-core-3.1.1-19.5.el5_5.6.i386 openoffice.org-writer-3.1.1-19.5.el5_5.6.i386 openoffice.org-impress-3.1.1-19.5.el5_5.6.i386 openoffice.org-math-3.1.1-19.5.el5_5.6.i386 openoffice.org-calc-3.1.1-19.5.el5_5.6.i386 openoffice.org-graphicfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-draw-3.1.1-19.5.el5_5.6.i386 openoffice.org-xsltfilter-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_TW-3.1.1-19.5.el5_5.6.i386 openoffice.org-langpack-zh_CN-3.1.1-19.5.el5_5.6.i386
[root@localhost setup]#

 

当然,还可以继续改进,如下:

#!/bin/sh

do_once()
{
        rpm -e "$@" 2>&1 | grep '(installed)'
}

for ((I=1; I<=5; ++I))
do
        NEWDEPS="$(do_once "$@" $DEPS | awk '{print $6}')"
        DEPS="$DEPS $NEWDEPS"
        echo $I $NEWDEPS
        if [ ! "$NEWDEPS" ]; then
                break
        fi
done
 

这个改进主要是,

1. 对每次检查时新增的依赖包进行检查,如果没有新增的依赖包($NEWDEPS),程序停止运行;

2. awk 输出的 $8 也变成了 $6。其中缘由现在还没有找到。

 

用它来删除tomcat试试。

[root@localhost setup]# rpm -qa | grep tomcat
tomcat5-servlet-2.4-api-5.5.23-0jpp.22.el5_7
tomcat5-jsp-2.0-api-5.5.23-0jpp.22.el5_7

[root@localhost setup]# ./force_remove_package.sh tomcat5-servlet-2.4-api-5.5.23-0jpp.22.el5_7 tomcat5-jsp-2.0-api-5.5.23-0jpp.22.el5_7
1 hsqldb-1.8.0.9-1jpp.2.i386 bsf-2.3.0-11jpp.1.i386 bsf-2.3.0-11jpp.1.i386
2 bsh-1.3.0-9jpp.1.i386
3
[root@localhost setup]# rpm -qa | grep tomcat      
[root@localhost setup]#

 

发现上面改进过的脚本还是有问题的,在删除带有java的软件包时会有问题

改用sed而不是awk

#!/bin/sh

do_once()
{
        rpm -e "$@"
        rpm -e "$@" 2>&1 | grep '(installed)'
}

for ((I=1; I<=5; ++I))
do
        #NEWDEPS="$(do_once "$@" $DEPS | awk '{print $6 $8}')"
        NEWDEPS="$(do_once "$@" $DEPS | sed -e 's/^.*(installed)//')"
        DEPS="$DEPS $NEWDEPS"
        echo $I $NEWDEPS
        if [ ! "$NEWDEPS" ]; then
                break
        fi
done

 

使用sed替换能准确的取得依赖的软件包名称。

 

[root@localhost setup]# rpm -qa | grep java
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
tzdata-java-2011l-4.el5
[root@localhost setup]#

[root@localhost setup]# ./force_remove_package.sh java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 tzdata-java-2011l-4.el5
1 xml-commons-apis-1.3.02-0.b2.7jpp.10.i386 xerces-j2-2.7.1-7jpp.2.el5_4.2.i386 xalan-j2-2.7.0-6jpp.1.i386 xml-commons-resolver-1.1-1jpp.12.i386 gjdoc-0.7.7-12.el5.i386 antlr-2.7.6-4jpp.2.i386 lucene-1.4.3-1jpp.16.i386
2
[root@localhost setup]# rpm -qa | grep java
[root@localhost setup]#

 

 

3
3
分享到:
评论

相关推荐

    yum-3.4.3-150.el7.centos.noarch.rpm

    基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,...

    yum软件包管理命令.doc

    yum( Yellow dog Updater, Modified)是一个在 Fedora 和 ...基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

    YUM软件包管理工具与yum命令的详细介绍

    基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 rpm命令只能安装下载到本的.rpm格式的安装包,但是rpm并不能处理...

    yum-3.2.29-30.el6.noarch.rpm

    基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,...

    Linux 阶段学习的练习仓库.rar

    基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 2. 常用基本命令: yum install -y httpd 安装httpd并确认...

    yum下载软件及其依赖包.txt

    yum方式下载rpm到本地用于离线安装软件。Yumdownloader是一款简单,但是却十分有用的命令行工具,它可以一次性下载任何 RPM 软件包及其所有依赖包

    yum本地源+详细配置教程.zip

    基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 yum 主要是更方便的添加、删除、更新RPM包,自动解决软件包...

    Linux yum软件包管理方法

    基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,...

    yum 命令使用讲解

    基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,...

    linux基础之Centos7配置阿里yum源

    基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐的一次次下载安装。 1.备份或删除官方Yum库 mv /etc/yum.repos.d/* /tmp/ //将官方源...

    yum命令详解

    基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,...

    CentOS 6.5配置本地Yum源教程

    2、基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 3、本地Yum源的作用是你可以在不联网的情况下,就可以安装...

    正确的yum.docx

    Linux-yum ... 客户端:如果需要安装软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装

    入门linux基础之YUM工具介绍及使用篇

    YUM工具可以自动处理依赖性关系,可以一次性安装所有依赖的软件包,它的好处在于避免繁琐的下载依赖软件包,以及安装。所以YUM工具在平时工作中是必不可少的一把利器! 安装程序以httpd为例 yum -y install httpd ...

    软件包管理–yum管理软件

    可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 官方源配置 etc/yum.repos.d/文件名(repo结尾) [ ] #库名 name = #库说明 baseurl = 地址 #库地址 gpgchech = 0 #关闭校验 ...

    linux.chm文档

    rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 rpm -U package.rpm 更新一个rpm包但不改变其配置文件 rpm -F package.rpm 更新一个确定已经安装的rpm包 rpm -e package_name.rpm 删除一个rpm...

    yaml2rpm:建立RPMS的通用方法

    yaml2rpm 用于构建RPMS的通用方法论该软件使用基本的Rocks方法论来自动创建RPM规范文件来创建软件包...尝试删除其他软件包所依赖的关键软件包时,软件依赖性解决方案可以避免许多错误 二进制包可以“编译一次”,并可

    linux 下的yum命令详解

    基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,...

Global site tag (gtag.js) - Google Analytics