Answers:
该脚本可以列出来自特定服务器/分支的所有软件包(修改两个声明的变量):
#!/bin/bash
server="http://it.archive.ubuntu.com/ubuntu/"
branch="maverick-updates/main"
apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') |
awk -v server="$server" -v branch="$branch" \
'/^[^ ]/ { split($1, a, ":"); pkg = a[1] }
nextline == 1 { nextline = 0; if ($2 == server && $3 == branch) print pkg }
/\*\*\*/ { nextline = 1 }'
如果您需要独立于分支机构列出不是来自特定服务器的所有软件包,则将倒数第二行替换为:
nextline == 1 { nextline = 0; if ($2 != server) print pkg }
$2 == server && $3 == branch
为$2 != server
,我的问题得到了回答。请把它放在您的答案中:)(该branch=
行可以删除)注意:假定所有软件包都来自一个存储库服务器。
libvpx0
软件包既存在于主要存储库中,也存在于每天的铬PPA中。从中删除存储库后/etc/apt/sources.list.d
,我还有一个剩余的包:libvpx0
。我对它进行了“修复”,如下所示:使用dpkg删除库,而忽略依赖项:sudo dpkg --ignore-depends=libvpx0 --remove libvpx0
。接下来,从主仓库重新安装它:sudo apt-get install libvpx0
。
sudo apt-get install libvpx0=$version_string
假设两个可用的软件包具有不同的版本字符串,则可能可以缩短您的工作。
apt-cache policy $(dpkg -l | awk '/^ii/{print $2}') > policy.txt; awk '!/^ /{pkg=$1}check{print pkg, $2;check=0}/\*\*\*/{check=1} ' policy.txt | grep -v archive.ubuntu
是一个好的开始(添加更多内容grep -v
以排除某些PPA)。在任何仓库中都未知的软件包版本显示为/var/lib/dpkg/status
。
查看ppa-purge。
用法:
ppa-purge -purge <nameofppa> [-s hostserver]
主机服务器默认为ppa.launchpad.net
。
这是该命令的联机帮助页ppa-purge
的链接,以供参考。
aptitude
的Multiarch Bugppa-purge
通常,正如Vadim Rutkovsky和Takkat所解释的那样,ppa-purge
使用默认语法运行是删除PPA提供的所有软件包的有效方法,并尽可能将其适当降级为其他已配置软件源提供的版本。
但是,正如Takkat所指出的那样,错误831768阻止ppa-purge
删除多体系结构软件包(例如,安装在64位系统上的32位软件包)正常工作。这是因为aptitude
无法处理多体系结构软件包中冲突的依赖关系(这就是错误所在),并且默认行为ppa-purge
是aptitude
用于降级软件包。
幸运的是,ppa-purge
接受-i
这会导致它喜欢的标志apt-get
,以aptitude
作为其后端。如错误报告中所述,using apt-get
是手动调用的有效替代方法aptitude
,因此ppa-purge
,使用-i
标志运行应该是删除/降级PPA提供的所有软件包(包括多体系结构软件包)的有效解决方法。
语法如下:
sudo ppa-purge -i ppa:ppaowner/ppaname
与往常一样(与-i
不使用标志时相同):
ppaowner
由PPA的所有者替换。/ppaname
是可选的。如果存在,ppaname
则替换为PPA的名称。如果不是,则默认为ppa
。例如,假设我安装了用于不稳定版本的qBittorrent的PPA,并且我想将其完全删除,并自动在后台使用apt-get
aptitude
其他软件来将qBittorrent降级为可通过我的其他软件来源获得的任何版本,而无需使用。然后我会运行:
sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable
由于某些原因,手册页ppa-purge
中未记录一些有用的选项,包括。但是您可以通过运行(或仅不带参数)获取有关它们的信息:-i
ppa-purge -h
ppa-purge
ek@Del:~$ ppa-purge -h
Usage: sudo ppa-purge [options] <ppa:ppaowner>[/ppaname]
ppa-purge will reset all packages from a PPA to the standard
versions released for your distribution.
Options:
-p [ppaname] PPA name to be disabled (default: ppa)
-s [host] Repository server (default: ppa.launchpad.net)
-d [distribution] Override the default distribution choice.
-y Pass -y --force-yes to apt-get or -y to aptitude
-i Reverse preference of apt-get upon aptitude.
-h Display this help text
Example usage commands:
sudo ppa-purge xorg-edgers
will remove https://launchpad.net/~xorg-edgers/+archive/ppa
sudo ppa-purge -p xorg-testing sarvatt
will remove https://launchpad.net/~sarvatt/+archive/xorg-testing
sudo ppa-purge ppa:ubuntu-x-swat/x-updates
will remove https://launchpad.net/~ubuntu-x-swat/+archive/x-updates
Notice: If ppa-purge fails for some reason and you wish to try again,
(For example: you left synaptic open while attempting to run it) simply
uncomment the PPA from your sources, run apt-get update and try again.
“根据喜好而取反的倾向”有点含糊。通过查看相关的源代码片段(ppa-purge
毕竟,这只是一个shell脚本),我们可以看到这意味着默认行为是偏向aptitude
于apt-get
,并且该-i
标志反转了此首选项。
ppa-purge
将不会删除或不再由PPA提供降级的包被“清除”。但是,您可能要对此发布一个单独的问题,以获得更权威或有据可查的答案。
ppa:username/path
。另外,在尝试清除PPA之前,必须先启用PPA,即使脚本在更新要删除的软件包列表后立即禁用,它也不会“查找”已禁用的PPA。
aptitude search ~o
如果您需要清除从PPA中删除的东西(或通过一次性安装),可以尝试使用没有安装源的孤立软件包dpkg -i
。
这是GUI的方法。希望它对那些不喜欢CLI的人有所帮助。这些步骤简单易行。
打开突触包管理器。如果未安装,请通过以下方式安装:
sudo apt-get install synaptic
打开后,单击左下方的Origin按钮。它将在左上方列出所有存储库。选择要删除软件包的特定存储库。它将列出该存储库下的所有软件包。单击第一个字段,即S或“ 已安装的版本”字段,以首先显示已安装的软件包。
现在选择所有要删除的软件包。
标记为删除的提示:
选择第一个程序包,然后按住Shift键,然后再次选择最后一个程序包以全选。然后右键单击该方框,选择标记为删除或标记为彻底清除。
或选择任何软件包,然后按Ctrl+ A选择全部。然后右键单击方形框,然后选择要删除的标记或要完全删除的标记。
而已。它将毫无问题地删除。我还附加了图像以使其更清晰。希望这会有所帮助。:)
要至少找到它们,请先禁用PPA并运行apt-get update
。然后安装apt-show-versions
。apt-show-versions | grep 'No available'
然后,运行将为您提供在已配置的存储库中找不到的所有已安装软件包的列表。使用一些命令行魔术,您可能可以只去除软件包名称,然后将它们传递给apt-get remove
:
for i in `apt-show-versions | grep 'No available' | cut -d' ' -f 1` ; do sudo apt-get remove -y $i ; done
请注意,这将遍历返回的列表apt-show-versions
,并将它们一一删除。根据发现的内容,这可能会由于依赖关系而意外卸载某些内容,因此请首先进行检查。
libvpx0
每天使用铬的PPA 的包装。@enzotib的答案确实显示了此软件包。
apt-show-versions
以非root用户身份运行,则需要a sudo apt-show-versions -i
来更新其缓存并查看新删除的存储库/ PPA中的更改(否则,只能通过cron.daily作业进行更新)
我发现使用ppa-purge很困难。
打开系统下的Synaptic软件包管理器,然后选择设置,存储库。
删除不需要的内容。
做完了!