【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
记住,最后一行不用给回车或者换行。
粘贴完成,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即可。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------批量删除完成-------------------------------------------------------------------------------------------