如何从 apt-get autoremove 中排除软件包?

如何从 apt-get autoremove 中排除软件包?

我遇到的情况是,要删除的孤立包列表中apt-get autoremove包含我想保留的包。显然,我不小心删除了一个依赖于它的包。我现在如何将该包标记为明确需要,这样apt-get autoremove就不会删除它?

答案1

使用apt-mark

$ man apt-mark
...
manual
       manual is used to mark a package as being manually installed, which will 
prevent the package from being automatically removed if no other packages 
depend on it.

所以

sudo apt-mark manual <package-name>

现在autoremove不会删除它。

撤销

sudo apt-mark auto <package-name>

autoremove如果该包不是任何其他包的依赖项,现在将删除该包。

答案2

谷歌搜索了几次,结果出现了解决方案

也可以直接明确安装:

sudo apt-get install <package>

或通过以下方式标记为手动安装

sudo apt-mark manual <package>

apt不会重新安装,输出将如下所示:

$ sudo apt-get install tmux
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tmux is already the newest version.
tmux set to manually installed.

答案3

这个问题已经回答得很好了,但我发现有一种情况是我不想“标记”许多包(然后在之后取消标记它们autoremove)。

当你的软件包列表自动删除很容易定义,然后您可以通过管道/ sed/xargs将它们输出。

我没有很多包的复杂例子,但如果我有以下场景:

root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
  linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
  linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.

并且我只想删除linux*包,我可以这样做:

root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic

因此从这里开始,很容易通过xargs命令行参数将这些传递给简单的apt-get remove -y

apt-get autoremove -s \
  | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
  | xargs apt-get remove -y

通常在使用时xargs,我会防止参数中出现空格(例如find ... -print0 | xargs -0 ...),但由于包名称中没有空格,因此我愿意使用换行符分隔的参数。

(我认为在其他情况下,“标记”保留,然后取消保留包裹会更合适。这也可以用正则表达式和来完成xargs,但可能过度设计情况。)

相关内容