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


8

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

  • 仅从该来源中删除所有软件包
  • 将所有软件包还原为我原始来源中的版本
  • 或者,列出此源中所有软件包的列表,以便我可以手动执行此过程

我怎样才能做到这一点?

Answers:


11

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

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


这看起来很有希望,我能以某种方式获得来源清单吗?
david.libremone

2
是的,apt-cache policy将为您显示所有已配置存储库的来源(o=在输出中查找)。
史蒂芬·基特

3

或使用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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.