列出独立于发行版的已安装软件包

列出独立于发行版的已安装软件包

我正在寻找一些标准方法来获取 Linux 计算机中所有已安装的软件包,但我想独立于发行版来实现它。

我找到了一些非常 好的 答案这里是一些特定的发行版,如 Debian/Ubuntu、Fedora/CentOS 等,但我没有成功地以独立于发行版的方式获取此信息。

我的第一个选择是:列出某些特定位置的所有目录,例如/opt/usr/bin。但使用这种方法,我没有有关安装版本的信息。在最好的情况下,我可以获得已安装软件包的名称等等。

一些背景:

我有一个 IP 地址和端口列表(在电子表格中),需要通过 SSH 进入每个系统并获取已安装的软件包及其版本,但发行版可能会有很大差异。

这将是一项一次性任务,但将来还会出现其他电子表格,因此我将多次使用相同的解决方案。

由于我了解电子表格中的一些计算机并根据客户的信息,我可以推断该列表适用于服务器,只有一些台式机。正如我之前所说,发行版可能会有很大差异,但可以肯定地说我拥有大量 Ubuntu、Debian 和 CentOS 机器。

对于桌面来说,大多数是 Ubuntu 和一些 macOS。

如果有帮助的话,我可以使用一些 Bash、Python 或 PHP 脚本。

对于第一个版本,我决定忽略特定于语言的包管理器,例如npmrvmcomposer等,即使这些包是全局安装的。

简而言之:是否有任何标准方法可以使所有已安装的软件包独立于发行版?

答案1

不完全是这样,因为今天的一些发行版使用tar它们的“包管理器”。但是,您通常可以查看/etc/issue相关系统的发行版和版本的名称,并做出一些推断。或者,您可以简单地检查是否存在二进制文件,例如yumup2dateaptemergepacmanbrewportchoco等。然而,有趣的是,在(比如)Debian 派生的系统上,这可能会失败,于是有人决定尝试并开始yum工作。

答案2

您绝对可以开发一个 ansible playbook,它将检查机器/服务器/主机的操作系统,然后使用相应的包管理器命令列出包名称。

相关内容