用于获取类似于 Ubuntu 软件中心的(简短的)已安装应用程序列表的脚本?

用于获取类似于 Ubuntu 软件中心的(简短的)已安装应用程序列表的脚本?

我该如何编写脚本来获取与 Ubuntu 软件中心报告的相同的已安装软件列表?

我能找到的每个参考资料都提到了 dpkg -l 或 rpm -qa(或它们的某种变体),但这些通常包括每一个最后的包和库等等,最终会得到 1000 多个条目的列表。

但是,Ubuntu 软件中心应用程序显示的列表非常简洁(且人性化),我的 Ubuntu 机器上目前有 67 个项目。这是我感兴趣的列表。有人能告诉我一个可以获得类似结果的脚本吗?最好是可以在其他发行版上运行的脚本,但我会接受我能得到的任何结果。

谢谢。

答案1

在 Python 中,您可以通过这种方式获取已安装包的列表:

import apt
packages = apt.Cache()
packages.open()
installed_packages = [i.name for i in packages if i.is_installed]

如果您想了解有关软件包的更多信息,这个过程会更复杂一些。请参阅 Python 的 apt 模块的文档以获取所有可用信息。此外,您可以查看软件中心的源代码以了解它们的作用。

仅通过查看某个文件或运行简单命令无法获得此信息。您需要编写一些脚本。

编辑:我相信软件中心会从附带 .desktop 文件的软件包中获取要显示的软件包列表。它可能比这更复杂,但您可以轻松地将列表过滤为已安装并具有 .desktop 文件的软件包。此示例继续我之前的代码:

import os
desktop_files = ['.'.join(i.split('.')[:-1]) for i in os.listdir('/usr/share/applications')]
installed_in_software_center = [i for i in installed_packages if i in desktop_files]

答案2

可能仍然不是您所寻找的...

dpkg --get-selections

如果没有(我暂时无法评论),请运行以下命令并告诉我数量(仅计算行数)。

dpkg --get-selections | wc -l

答案3

您可以从 中的日志中获取数据/var/log/apt。由于日志会轮换,因此大多数日志都会被压缩。首先,我们将当前日志与压缩日志合并,然后提取所有已安装的软件包(但不会自动提取)。这只是我的尝试,因此可能需要稍微清理一下。

cd /var/log/apt   
sudo -s
cat history.log > allhistory
zcat history.log*gz >> allhistory.log
cat allhistory.log | grep Install | sed s/Install://g | tr ')' '\n' | grep -v automatic | sed s/,//g | sed s/:.*$//g | sort -u | grep -v "^$"

答案4

或许亚太地区有助于?

它是一款扫描 APT 安装的软件包并为您创建列表的工具。然后,您可以手动选择/取消选择所需的软件包,保存列表,它甚至可以下载/使用缓存将选定的软件包保存在 CD/文件夹中(用于离线自动安装当前安装的应用程序)

它还具有一些过滤器,如包含依赖项、包含旧版本等。

APTonCD 是 Mint 10 的默认软件,但由于它们共享相同的 Ubuntu 存储库,因此您可以通过软件管理器安装它。

相关内容