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


例如,我要刪除如下文件名匹配上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即可。

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

----------------------------------------------------------------------------------批量刪除完成-------------------------------------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM