#1 楼
如上面的评论中所述,apt
的历史记录在/var/log/apt/history.log
中。就是说,这不会列出使用dpkg
或gdebi
之类的GUI手动安装的软件包。要查看通过dpkg
的所有软件包,可以查看/var/log/dpkg.log
。#2 楼
您可以列出已通过apt-mark
明确要求安装的软件包。 > 以下命令提供了手动或自动请求安装的软件包列表。除非您正在(正在)安装软件包中,否则这是已安装软件包的列表。
apt-mark showmanual
以下命令提供了自动安装的软件包的超集:
dpkg --get-selections | sed -n 's/\t\+install$//p'
将它们放在一起,以下命令列出了手动安装的软件包:
</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print}'
评论
---与comm -23截然不同的结果<(apt-mark showmanual | sort -u)<(gzip -dc /var/log/installer/initial-status.gz | sed -n's / ^ Package:// p'|排序-u)
– Cbhihe
2015年10月27日15:09
在Debian上,有apt-mark showmanual等效于您的上一个命令。
–maxschlepzig
17年1月22日在15:55
#3 楼
http://www.debianadmin.com/clone-your-ubuntu-installation.html和/var/adm/apt/history.log
评论
第一个链接中的过程不区分自动安装的软件包和手动安装的软件包。 /var/log/apt/history.log(您的位置错误,顺便说一句)将在几个月后消失。
–吉尔斯'所以-不再是邪恶的'
10年8月28日在7:55
吉尔斯在两个方面都是对的。我只有大约一个月的日志价值,而且我什至看不到日志删除率的设置方式(在FreeBSD上是通过'newsyslog'完成的)。所以我仍然没有解决方案,但是我有一些建议。我至少可以在克隆文章中grep命令的输出,查找“高级”名称,将其安装在新名称上,在新框中执行相同操作,比较两个结果,然后重复直到满意为止。我仍然希望听到更多的想法。
– Paul Hoffman
10年8月29日在15:42
#4 楼
我还以这种方式“压缩” tar.gz版本的历史记录文件:#5 楼
grep -i "Commandline" /var/log/apt/history.log
显示您使用以下各项安装的所有软件包:
sudo apt-get install xxxxx
评论
这与@ℝaphink的答案相差无几,应该对此做一个评论。
–卡尔·里希特(Karl Richter)
17年6月17日在16:16
#6 楼
最好不要使用tac / head组合,而要使用尾部(最后25行):tail -n 25 /var/log/apt/history.log
评论
这与@ℝaphink的答案相差无几,应该对此做一个评论。
–卡尔·里希特(Karl Richter)
17年6月17日在16:16
另外,也不一样。 tail将按照它们在文件中的顺序列出文件中的最后几行。 tac会颠倒顺序,以便最后一行现在是第一行,倒数第二行是第二行,依此类推。同样,当您说某事“更好”而不解释原因时,似乎冒着错误的风险。我的意思是,“更好”是根据谁?有什么要求?似乎有点过分自信。
–托德·沃尔顿(Todd Walton)
18年7月6日在18:36
#7 楼
其他答案有帮助,但给了我太多的输出。为了减少输出,我在此答案中以apt-mark showmanual
开始,然后滤除了最初安装的软件包(有关如何获取最初安装的软件包列表的信息,请参见此答案;我使用的是ubuntu 18.04.2,因此下面的链接)。BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
cut -f1 |
sort |
uniq
该脚本通过进行与版本无关的比较来筛选出原始清单中的软件包,从而使升级后的软件包不会出现在列表中。我最终得到了大约60个软件包的列表。
我喜欢的另一种方式是搜索所有apt日志的答案。
#8 楼
要按降序获取最新安装的软件包列表,我喜欢使用(例如25行):tac /var/log/apt/history.log |head --lines=25
评论
更有效的(和替代的)是:tail -25 /var/log/apt/history.log | TAC
–agc
17年4月4日在13:35
这与@ℝaphink的答案相差无几,应该对此做一个评论。
–卡尔·里希特(Karl Richter)
17年6月17日在16:17
评论
啊哈!之前已经有人问过了,答案很好。您可以接受以下答案吗?要感谢回答的人。
如何获取Debian上所有根目录/主要安装软件包的列表的可能重复
这些解决方案将仅检查上一次日志旋转之后发生的情况。他们不会检查所有历史记录。
这个问题的答案,askubuntu.com / a / 250530/197730,给出了简单快速的方法。如何列出所有已安装的软件包。