在 Ubuntu 中生成已安装软件包的列表

在 Ubuntu 中生成已安装软件包的列表

我想备份我在 Ubuntu 中手动选择的软件包列表,而不列出作为依赖项安装的软件包。例如,

dpkg --get-selections

返回所有已安装软件包、手动选择的软件包以及依赖项的完整列表。如何过滤依赖项?

答案1

我自己找到了一个解决方案:)

dpkg --get-selections | cut -f 1 > /tmp/all
apt-mark showauto > /tmp/auto
diff /tmp/all /tmp/auto | grep '<' | sed 's/.* //'

这将首先生成已安装软件包的完整列表“全部”,然后生成自动安装软件包的列表“自动”,最后创建一个所有软件包和自动软件包的差异列表,这就是我需要的列表。

还有更好的建议吗?

答案2

您可以过滤掉 lib 包,然后手动过滤剩余的包。我认为没有标准的方法来做到这一点。

dpkg --get-selections |wc -l
1831
dpkg --get-selections |grep -v ^lib | wc -l
1060

答案3

# 假设你的 dpkg 日志可以追溯到最初的机器安装

###(可能/可能无法跨 dist-upgrades 工作)

apt-mark showauto >/tmp/auto.pkgs

创建完整的 dpkg 时间线日志
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
现在将操作系统最初安装的软件包归档
awk -v initialinstall=1 '
   / install grub-pc / {initialinstall = 0; next;}                     
   / install / {if ( initialinstall == 0) print $4;}
' /tmp/dpkg.full | grep -vf /tmp/auto.pkgs >~/iInstalled.pkgs

答案4

如果您想要一份未标记为自动安装的软件包列表(这并不总等同于不存在依赖项),您可以使用更简单的方法执行此操作,aptitude如下所示:

aptitude search ~i | grep "^i   " | awk '{ print $2 }'

如果您真的想清除所有依赖项,可以研究~R~D搜索模式。我认为aptitude是目前推荐的 dpkg 和 apt 前端。您会发现,除了 ncurses 界面外,它还有许多非常有用的命令行选项。

相关内容