cp /dev/null /tmp/dpkg.full
for LOG in $(ls -rt /var/log/dpkg.log.[0-9].gz /var/log/dpkg.log.1[0-9].gz)
do
test -e $LOG && gunzip -c $LOG>> /tmp/dpkg.full
done
for LOG in $(ls -rt /var/log/dpkg.log /var/log/dpkg.log.[0-9] /var/log/dpkg.log.1[0-9])
do
test -e $LOG && cat $LOG >>/tmp/dpkg.full
done
我给自己破解了一个解决方案:)
这将首先生成一个完整的“所有”已安装软件包列表,然后是一个自动安装的“自动”列表,最后创建一个与 all 和 auto 的差异列表,这是我需要的列表。
有更好的建议吗?
您可以过滤掉 lib 包并手动过滤剩余的包。我认为没有标准的方法可以做到这一点。
# 假设你的 dpkg 日志回到初始机器安装
###(可能/可能不适用于 dist 升级)
创建完整的 dpkg 时间线日志 现在过滤掉最初由操作系统安装的包apt-mark showauto >/tmp/auto.pkgs
如果您想要一个未标记为自动安装的软件包列表(这并不总是与不是依赖项相同),您可以使用以下方式以更简单的方式执行此操作
aptitude
:如果您真的关心清除所有依赖项,您可以查看
~R
和~D
搜索模式。我认为aptitude
是目前推荐的 dpkg 和 apt 前端。您会发现除了 ncurses 界面之外,它还有许多非常有用的命令行选项。