Lek*_*eyn 32 package-management
为了从 10.04 平滑升级到 10.10,我想删除所有不在默认存储库中的包(例如,chromium PPA 和第三方存储库)。查找和删除这些包的最简单方法(最好是 CLI)是什么?
编辑:这个问题不限于 PPA,我也有一个 x2go 存储库,所以我正在寻找一个通用命令来删除属于某个存储库的包。对于 PPA,如何删除PPA 的问题有很好的答案。
Eli*_*gan 18
aptitude的 Multiarch 错误ppa-purge通常,正如Vadim Rutkovsky和Takkat所解释的那样,ppa-purge使用默认语法运行是删除 PPA 提供的所有软件包的有效方法,并尽可能将它们正确降级到其他配置软件源中提供的版本。
然而,正如 Takkat 所指出的,错误 831768阻止ppa-purge了删除多架构包(如安装在 64 位系统上的 32 位包)的正常工作。这是因为aptitude无法处理多架构包中的冲突依赖项(这就是错误所在),并且默认行为ppa-purge是aptitude用于降级包。
幸运的是,ppa-purge接受-i这会导致它喜欢的标志apt-get,以aptitude作为其后端。如错误报告中所述, usingapt-get是手动调用的有效替代方法aptitude,因此ppa-purge使用该-i标志运行应该是删除/降级 PPA 提供的所有包(包括多架构包)的有效解决方法。
这是语法:
sudo ppa-purge -i ppa:ppaowner/ppanameRun Code Online (Sandbox Code Playgroud)
像往常一样(与-i不使用标志时相同):
ppaowner 被 PPA 的所有者取代。/ppaname是可选的。如果存在,ppaname则替换为 PPA 的名称。如果没有,则默认为ppa。例如,假设我有PPA不稳定构建的qBittorrent安装,我想彻底删除,自动降级qBittorrent到任何版本可以通过我的其他软件来源的使用apt-get场景,而不是落后aptitude。然后我会运行:
sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable
Run Code Online (Sandbox Code Playgroud)
出于某种原因,它的手册页ppa-purge中没有记录一些有用的选项,包括. 但是您可以通过运行(或不带参数)来获取有关它们的信息:-ippa-purge -hppa-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.
Run Code Online (Sandbox Code Playgroud)
“apt-get 对 aptitude 的反向偏好”有点神秘。通过查看源代码的相关部分(ppa-purge仅仅是一个shell脚本,毕竟),我们可以看到,这意味着默认行为是喜欢aptitude到apt-get和-i标志逆转这种偏好。
enz*_*tib 12
此脚本可以列出来自特定服务器/分支的所有包(修改两个声明的变量):
#!/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 }'
Run Code Online (Sandbox Code Playgroud)
如果您需要独立于分支列出不是来自特定服务器的所有包,请将倒数第二行替换为:
nextline == 1 { nextline = 0; if ($2 != server) print pkg }
Run Code Online (Sandbox Code Playgroud)
这是这样做的 GUI 方法。希望它对那些不喜欢 CLI 的人有所帮助。这些步骤简单易行。
打开突触包管理器。如果未安装,请通过以下方式安装:
sudo apt-get install synaptic
Run Code Online (Sandbox Code Playgroud)打开后单击左下角的Origin按钮。它将在左上角列出所有存储库。选择要删除其包的特定存储库。它将列出该存储库下的所有包。单击第一个字段 i,e 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
Run Code Online (Sandbox Code Playgroud)
请注意,这将遍历返回的列表apt-show-versions并将它们一一删除。根据它发现的内容,这可能会因依赖项而意外卸载某些内容,因此请先检查它。