【Linux】CentOS7上rpm命令批量卸载删除模糊rpm包名

简介: 例如,我要删除如下文件名匹配上wine的所有文件如果单独rpm删除卸载一个rpm包的话,命令如下:rpm -evh --nodeps wine-common-1.8.6-1.el7.noarch-e                   卸载-vh                   合...

例如,我要删除如下文件名匹配上wine的所有文件

如果单独rpm删除卸载一个rpm包的话,命令如下:

rpm -evh --nodeps wine-common-1.8.6-1.el7.noarch

-e                   卸载

-vh                   合在一起使用,展示详细信息和进度条

--nodeps               不用查找其他依赖,直接卸载这个

wine-common-1.8.6-1.el7.noarch         文件名,从上面复制下来的

 

但是,上面这个wine打头的文件实在是很多,不想一个一个卸载,怎么办了?

1.首先vim命令新建并打开一个文件

vim uninstall

粘贴如下文本:

进入之后,键盘i进入编辑模式,粘贴下面的话

#!/bin/bash

################################################################
#
#  function: batch uninstall rpm packages
#  setup:
#         1. copy the scripts and save as a file, such as: ex.sh
#         2. switch to root user. su - root
#         3. change the file's permission: chmod +x ex.sh
#         3. running the script with no parameter: ./ex.sh
#  runing:
#        uninstall [rpm package name]
#  author: Topurce Zhou (topurce#at#hotmail.com)
#
################################################################

if [ "$UID" -ne 0 ]
then
    echo -e 'must be \E[34m\033[1mroot\033[0m to run this script.'
    echo -ne '\E[0m'
    exit 67
fi

if [ ! -f /usr/bin/uninstall ]
then
   echo "building file..."
   scripts="$(cat $0)"
   declare -i index=1
   cat $0 | while read line
   do
       if (( index == 19 ))
       then
          echo 'echo -e "must be \E[34m\033[1mroot\033[0m to run this script."'>>/usr/bin/uninstall
          echo 'echo -ne "\E[0m"'>>/usr/bin/uninstall
       elif (( index == 23 ))
       then
          echo 'stips="searching packages for \"$1\":"'>>/usr/bin/uninstall
      echo 'usage="usage: $0 \"package name\""'>>/usr/bin/uninstall
       elif (( index != 19 && index != 20 && (index<23 || index>52) ))
       then
          echo $line>>/usr/bin/uninstall
       fi
       index+=1;
   done
   chmod +x /usr/bin/uninstall
   echo "try \"uninstall [package name]\" again."
   exit
fi

stips="searching packages for \"$1\":"
usage="usage: $0 \"rpm package name\""

if [ $# -eq 0 ]
then
    echo "$0: no rpm packages given for uninstall."
    echo $usage
elif [ $# -gt 1 ]
then   
    echo $usage
else
    echo $stips
    rpms="$(rpm -qa | grep $1)"
    declare -i count=0
    for rpmk in $rpms
    do
       count+=1
       echo "package: $rpmk"
    done
    if (( count == 0 ))
    then
       echo "no packages"
       exit
    fi
    echo "packages: $count"
    echo
    read -p "are you sure you want to uninstall all above packages?(y/n)"
    if [[ $REPLY == [Yy] ]]
    then
         echo "starting to uninstall packages..."
         for rpmk in $rpms
     do
         count+=1
         echo "uninstalling package: $rpmk"
             rpm -e --nodeps $rpmk
             if [ $? -eq 0 ]
             then
             echo "done"
             else
                 echo "faild to uninstall $rpmk"
             fi
      done
    fi
fi
View Code

记住,最后一行不用给回车或者换行。

粘贴完成,Esc以下,shift+Q以下,x保存退出。

 

2.接下来,修改文件权限为可执行

ls -l

查看当前文件的详细信息,包含权限

chmod +x uninstall

为uninstall文件添加x   即可操作的权限

再次查看,就可以看到uninstall文件当前已经有了可读可写可操作的权限了。

 

3.最后执行本文件

./uninstall

./文件名,就是执行本文将

可以看到

提示中,要求 在执行./uninstall文件的时候,直接在后面把rpm package name加上一起执行,注意这里的rpm包名字是模糊查询的,

【注意】:一定要注意,如果你不能确定rpm包名模糊匹配下删除的文件,涉及到linux系统的,千万不要使用此方法去批量卸载删除。

 

正因为是模糊查询的,因此本方法中是由相关提示的,你可以在下面执行过程中,查看是否不会涉及到你不想卸载的东西而决定是否继续。

上面接着,要加上rpm包名,所以执行下面的命令:

./uninstall wine

wine就是我要卸载的包名,模糊查询,出来下面的结果

上面将你即将 要卸载的文件一一列出来了,确定要批量删除的话

键入y即可。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------批量删除完成-------------------------------------------------------------------------------------------

相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
108 8
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
381 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
88 3
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
80 2
|
20天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
50 14
Linux 10 个“who”命令示例
|
9天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
78 20
|
7天前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
41 13
|
9天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
34 7
|
29天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
34 9
|
27天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解