怎样使用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]#
分享到:
相关推荐
### Ubuntu下使用rpm软件包 在Linux环境中,不同的发行版采用了不同的软件包管理系统来处理软件的安装、更新和卸载等操作。Ubuntu主要使用的软件包格式是`.deb`,而另一些基于Red Hat的发行版(如Fedora、CentOS等...
- **批量安装**:使用`rpm -i *.rpm`命令可以一次性安装多个软件包。 - **软件包升级**:通过`rpm -Uvh <new_package.rpm>`命令可以升级现有的软件包。 - **查询已安装软件包的信息**:利用`rpm -qa`命令可以列出...
在RPM包中,这些依赖项将以特定版本和适当的配置打包在一起,便于一次性安装。安装这些依赖包通常通过命令行执行,如`yum install`或`dnf install`(取决于你的Linux发行版)。 一旦这些依赖项安装完毕,就可以继续...
标题中的“本地安装gcc-c++依赖rpm”指的是在Linux系统中,通过本地已经下载好的RPM(Red Hat Package Manager)包来安装GCC-C++编译器及其所有必需的...这样可以确保一次性安装成功,避免因为缺失依赖而导致的错误。
3. **安装依赖**:如果缺少依赖,可以逐个安装,或者使用`yum install <dependency_package>`(对于CentOS 6.x及更早版本)或`dnf install <dependency_package>`(对于CentOS 7.x及以上版本)一次性解决所有依赖。...
首先使用tar命令解压缩文件,然后进入解压后的目录使用rpm命令安装所有相关的rpm软件包。在Linux系统中,使用rpm -ivh可以进行软件包的安装。 6. 指定标签为"rpm",这表明这些文件都是与rpm包管理器相关的软件包,...
这个压缩包文件包含的是`createrepo`安装所需的依赖包,通过进入包目录并执行`rpm -ivh *`命令,可以一次性安装所有必要的依赖,以便后续安装和使用`createrepo`。 首先,让我们深入了解一下`createrepo`的基本概念...
yum提供了基于网络的管理方式,能够自动解决软件包之间的依赖关系,并且可以一次性安装所有依赖的软件包。yum的基本命令包括“yum install [软件包名]”用于安装软件包,以及“yum remove [软件包名]”用于卸载...
在解压得到的文件列表中,用户需要进入解压后的目录,然后使用rpm命令一次性安装所有rpm包。这样可以确保所有依赖关系正确处理。 在解压和安装过程中,可能需要管理员权限,因此使用了sudo命令。rpm命令的选项-i...
ntpdate-4.2.6p5-12.el6.centos.2.x86_64.rpm 包含了一个命令行工具`ntpdate`,它可以一次性地校准系统时钟,而不是持续运行的服务。这通常在系统启动时或者需要快速校准时钟时使用,例如在没有网络连接时手动更新...
*通配符用于匹配当前目录下所有的rpm文件,从而一次性安装多个rpm包。 在实际操作过程中,可能会遇到依赖问题。rpm在安装软件包时会检查并尝试安装所需的依赖包,但在复杂情况下,仍可能需要手动解决依赖问题,例如...
4. 在安装过程中,*.rpm通配符的使用表明可以一次性安装当前目录下所有rpm扩展名的文件。这一点对于处理多个依赖包非常有帮助。 5. 安装指令中还提到了sudo权限,意味着在执行安装过程中,可能需要管理员权限。在...
`*.rpm`是通配符,它会匹配当前目录下所有的RPM文件,从而一次性安装所有包。 安装YUM和相关RPM包后,系统将能够处理软件包的依赖关系,这使得在没有在线更新的情况下也能安装其他RPM软件。例如,你可以使用`yum ...
这个压缩包提供了一个方便的安装方式,允许用户通过简单的解压和执行命令来安装ELinks及其依赖软件包。在实际安装过程中,用户可能需要根据实际环境进行一些定制化的配置,比如配置ELinks的用户界面和行为,或是连接...
版本号9.9p1表示这是该系列的第9版第9次更新,它提供了一系列的安全性和性能上的增强。这个版本是在x86-64架构的Linux系统上使用的rpm包,rpm(Red Hat Package Manager)是Red Hat及其衍生版如CentOS的软件包管理...
这些文件被打包在一起,方便用户一次性下载和安装。 描述部分还提供了安装该软件包的详细步骤。首先,用户需要使用tar命令对压缩包进行解压。解压完成后,用户需要进入到包含rpm文件的目录中,并执行rpm命令来安装...
在该压缩包中,包含了一个主要软件包avahi-0.6.31-20.el7.x86_64.rpm,以及一系列其他依赖软件包。Avahi是实现零配置网络服务发现(zero-configuration networking service discovery)的软件库,它允许应用程序发现...
yum能够自动从指定的服务器下载并安装RPM包,并且能够自动处理软件包之间的依赖关系,允许用户一次安装所有依赖的软件包,而不必手动一个个下载和安装。 yum命令的基本语法为:yum [options] [command] [package .....
由于这个文件实际上是一个tar.gz压缩包,其中包含多个rpm文件,因此,需要逐个解压并安装这些rpm文件,或使用rpm工具一次性安装,前提是它们被正确排序并且满足依赖关系。 压缩包中的文件名称列表显示,除了一个...
安装指令使用了rpm命令来安装RPM包,并且通过使用通配符“*”来指定当前目录下所有rpm后缀的文件,这可以让用户一次性安装所有依赖项和主程序。值得注意的是,安装过程中可能需要管理员权限(使用sudo命令),因为...