这是一篇问答式的文章 --- 希望在新 LTS 版本发布期间为您提供帮助。这篇文章中有很多链接,请关注并点赞,以给予作者相应的赞誉。
通常建议移除或清除在进行版本升级时,我经常会遇到很多麻烦,无法记住安装了哪些 PPA 以及哪些软件包属于特定 PPA --- 您有时会安装一个 PPA,但这并不意味着您已经安装了其中的所有软件包。
PPA 列表如下:有很多不错的剧本;并且发现从 PPA 真正安装的软件包您可以使用apt-cache policy
或类似的命令。
但是 --- 是否有一个一站式脚本可以列出您安装的所有 PPA 以及从中安装的所有软件包?
答案1
以下脚本将为您提供如下列表:
PPA:tualatrix/ppa
---> ubuntu-tweak
PPA:otto-kesselgulasch/gimp
---> gimp
---> gimp-data
---> gimp-help-common
---> gimp-help-en
---> gimp-help-en-gb
---> gimp-help-es
---> gimp-help-it
---> gimp-plugin-registry
---> libgimp2.0
---> libopenjpeg-dev
---> libopenjpeg5
脚本如下(将其复制到文件并使其可执行):
#! /bin/bash
#
list_all_packages_repos() {
apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
awk '/^[^ ]/ { split($1, a, ":"); pkg = a[1] }
nextline == 1 { nextline = 0; printf("%-40s %-50s %s\n", pkg, $2, $3) }
/\*\*\*/ { nextline = 1 }'
}
list_packages_of() { #1 is the tmpfile, $2 is the ppa regexp
grep "$2" "$1" | awk '{print "---> ", $1}'
}
# cache all packages files now
tmpfile=/tmp/list_pcks.$$.txt
list_all_packages_repos > $tmpfile
# listppa Script to get all the PPA installed on a system ready to share for reininstall
for APT in $(find /etc/apt/ -name "*.list"); do
grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" "$APT" | while read ENTRY ; do
USER=$(echo "$ENTRY" | cut -d/ -f4)
PPA=$(echo "$ENTRY" | cut -d/ -f5)
echo PPA:$USER/$PPA
list_packages_of "$tmpfile" "$USER/$PPA"
done
done
rm "$tmpfile"