如何从一个包中删除所有程序?

Mar*_*arc 7 uninstall apt

当您安装 postgresql 之类的程序时,它会为其最新版本安装多个程序。

安装后如何删除所有这些包?因为使用

apt-get remove postgresql
Run Code Online (Sandbox Code Playgroud)

只删除那个头包

Izz*_*zzy 9

由于apt-get autoremove(由 Aaron 建议)将删除所有似乎不再依赖的“帮助程序包”,有时您出于某种原因想要保留其中的一些。因此,如果这与您有关,另一种可能性是:

$(apt-cache depends postgresql|awk '{print "sudo apt-get remove "$NF}')
Run Code Online (Sandbox Code Playgroud)

使用 Bash 作为 shell,这基本上会执行以下操作:

  1. apt-cache depends postgresql将列出 postgresql 依赖的所有包,包括 postgresql 本身。但是每一行看起来都像depends on: <package>——所以我们将输出通过管道传输到......
  2. awk '{print "sudo apt-get remove "$NF}'这将取每一行的最后一个单词(即包名),并在它前面加上我们预期的命令后打印出来:(sudo apt-get remove当然你也可以使用apt-get purge)。
  3. 最后,使用该$()构造,我们建议 Bash 将输出解释为要执行的命令。

您也可以替换第 3 步,而是将输出重定向到一个文件中:

apt-cache depends postgresql|awk '{print "sudo apt-get remove "$NF}' >pg_remove.sh
Run Code Online (Sandbox Code Playgroud)

然后检查文件,可以选择做一些调整(例如注释掉/删除要保留包的行),最后使用

bash pg_remove.sh
Run Code Online (Sandbox Code Playgroud)

现在你有很多选择:)

编辑:检查更复杂的元包,例如 lubuntu-desktop,需要改进上述语句:

apt-cache depends <packageName>|grep "Depends on"|awk '{print "sudo apt-get remove "$NF}'
Run Code Online (Sandbox Code Playgroud)

grep需要来限制结果到依赖关系(并跳过建议等)。

重要提示:您应该仅将它用于元数据包!!!否则,您最终可能会得到一个空磁盘(例如 postgresql-9.1 依赖于 libc6,而删除 libc6 肯定会适得其反,因为很多软件包都需要它)。

所以要小心,最好先重定向到一个文件(如解释)并在执行前进行调查。