apt-mark showmanual
为我列出了很多包:
root@hcompneu:~# apt-mark showmanual | wc -l
4013
root@hcompneu:~# apt-mark showmanual | head
a11y-profile-manager-indicator
abiword
abiword-common
abiword-plugin-grammar
account-plugin-facebook
account-plugin-flickr
account-plugin-google
account-plugin-identica
account-plugin-twitter
accountsservice
root@hcompneu:~# apt-mark showmanual | tail
yelp-xsl
zeitgeist
zeitgeist-core
zeitgeist-datahub
zenity
zenity-common
zip
zlib1g
zlib1g-dev
zlib1g:i386
据我了解,它应该只列出我手动安装的那些软件包。我不记得每种情况了,但我很确定我没有手动安装所有这些。实际上,我很少在这个系统上安装任何软件,尽管有 Chrome、OpenOffice 和其他一些非常基本的东西。所以我预计可能会有 10-100 个包的列表,但不会更多。也许它还包括来自基本 Ubuntu 安装的 ubuntu-desktop、grub 和 linux 左右。
也许在过去,虽然我编写了一些脚本来通过自动调用apt-get install XXX
各种包来修复损坏的系统。或者也许我做了其他事情。我真的不记得了。
这里会是这样吗?所以我以某种方式搞砸了?如果是这样的话,你有什么建议?将所有标记为自动安装,然后手动添加一些选定的包,如 ubuntu-desktop?
或者这样的输出是否正确而我理解错误?我读了这个,我不确定。获取手动安装的软件包列表看起来要复杂得多?或者为什么答案如此复杂?
或者是apt-mark showmanual
越野车?
root@hcompneu:~# ls -ld /var/log/installer/
drwxr-xr-x 2 root root 4096 Dez 27 11:27 /var/log/installer/
root@hcompneu:~# grep -r cdrom /etc/apt/ --include=*.list
root@hcompneu:~# dpkg -l | grep ^ii | wc -l
3812
TL;DR不,您的系统没有搞砸。此外,您可以将所有事物保持原样,保持当前状态。
让我们考虑三个系统:
dpkg -l | grep ^ii | wc -l
apt-mark showmanual | wc -l
笔记:
sudo apt-get install ubuntu-mate-desktop^
. 任务包的这种安装会导致所有此类包被标记为手动安装,从而防止它们被删除。所有其他软件都是在两个系统的生命周期内手动安装的。我试图对新旧系统的全新安装进行一些研究。下表是关于普通 Ubuntu 桌面 ISO 的全新安装的表格。
dpkg -l | grep ^ii | wc -l
aptitude search '~i!~M' | wc -l
apt-mark showmanual
我们可以在这里理解,Ubiquity 安装程序和 APT 本身的功能会随着时间的推移而发生变化。
从上表中我们可以看到,旧系统从安装的第 0 天开始就有大量手动安装的软件包。
较新的 Ubuntu 版本的数字较小,这简化了它们的维护。他们可能安装了更多元包,这些元包会因为依赖关系而阻止包删除。
我做过的另一个实验:我将全新的 Ubuntu 安装从 8.04 LTS 升级到 10.04 LTS → 12.04 LTS → 14.04 LTS → 18.04 LTS → 20.04 LTS,在生成的 20.04.3 LTS 系统中,我有 1867 个手动安装的软件包,总共 2913 个软件包。
包的“手动”安装状态阻止了它的删除,所以你不应该将包设置为自动安装。
很好的阅读资源:
第 2 章 Debian Reference 的 Debian 软件包管理。
man apt-mark
本地或在线,以下报价是必不可少的:showmaual 选项的输出包括任何有更新的包,所以不是你想要的。我从其他答案复制的以下命令(不记得在哪里或我将其归因于它),并将输出与初始安装列表进行比较,生成您自己安装的软件包。为方便起见,将其放入您的 bin 区域中的文件中。
我第一次运行 apt-mark showmanual 时,我知道列表太大了,因为包含了诸如“tar”之类的东西,我知道我从未手动触摸过。然而,“tar”应用了更新,导致它被输出。由于“tar”包含在初始系统包中,它会被脚本删除,只留下初始系统安装后“显示”的内容。
系统并没有“乱七八糟”,但基本上您对手动安装的含义的理解是不正确的。包实际上从未标记为手动或非手动。它只能被标记为自动或非自动。
当一个包被自动安装以满足依赖关系时,它被标记为自动。这意味着当没有其他包不再依赖它时,它可以(并且暗示它应该)被自动删除。
在普通桌面系统上,大多数软件包都是在安装程序首次安装操作系统时安装的。这些软件包必须不自动安装,否则它们将被删除,因为没有任何东西依赖它们。
以列表顶部附近的“abiword”为例。这是一个文字处理器,安装在桌面系统上可能很正常。我假设您使用了多种桌面安装程序中的一种。它可能没有具体询问您是否需要 abiword。您可能没有按名称自己安装 abiword。您仍然选择通过选择您使用的安装介质来拥有它。
由于您的系统上没有其他软件包依赖于您安装 abiword 才能工作,因此不能将其标记为自动,否则它将被删除。这意味着它没有标记为自动。
apt-mark showmanual
列出未标记为 auto 的包。另请注意,许多安装程序会安装非自动的所有内容,即使他们可以将它们标记为自动,因为某些东西取决于它们。即使是数百种事物所依赖的重要核心包也被标记为非自动。从这个意义上说,也许安装程序“搞砸了”,但您的系统并没有什么特别之处。
我最好的尝试获取我自己可能安装的东西的列表是:
要排除依赖的包,请使用:
根据
apt-mark
元包的所有依赖项的手册页都标记为manual
. 所以你可以运行:将所有这些包标记为自动。在那之后,
显示较少的包。