如何从一个 Debian 源卸载所有软件包?

如何从一个 Debian 源卸载所有软件包?

我之前添加了一些外部源,/etc/apt/sources.list.d但现在想删除其中之一。我也想:

  • 仅从该源删除所有包
  • 将所有包恢复到我的原始源中的版本
  • 或者,列出此源中的所有包,以便我可以手动执行此过程

我怎样才能做到这一点?

答案1

根据您要删除的存储库的配置,apt list --installed可能会提供足够的信息来识别您需要卸载或降级的包。如果存储库定义了唯一的“Origin”,则另一种选择是使用aptitude search '~i ~Oorigin'origin根据需要进行替换)。

(这是一个通用答案;如果您编辑你的问题要准确指定您要删除的来源,我可以添加具体的答案。)

答案2

或者使用 dpkg:

dpkg -l | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'|grep -v /var/lib/dpkg/status| sed -e 's/://'|awk '{printf "%-40s %-36s %-36s %-16s \n",$1,$2,$3, $4}' | grep -i yourkeyword

例如

dpkg -l | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'|grep -v /var/lib/dpkg/status| sed -e 's/://'|awk '{printf "%-40s %-36s %-36s %-16s \n",$1,$2,$3, $4}' | grep -i multimedia

返回:

audacious                                1:3.8.2-dmo1                         http://www.deb-multimedia.org        stretch/main     
audacious-plugins                        1:3.8.2-dmo1                         http://www.deb-multimedia.org        stretch/main     
audacious-plugins-data                   1:3.8.2-dmo1                         http://www.deb-multimedia.org        stretch/main    
snipp

这显示了来自 deb-multimedia.org 的软件包。结果与dpkg-query -W -f='${Section}\t\t${Package}\n' | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'|grep -v /var/lib/dpkg/status| sed -e 's/://'|awk '{printf "%-40s %-36s %-36s %-16s \n",$1,$2,$3, $4}' | egrep -i multimedia

相关内容