列出獨立於發行版的已安裝軟體包
我正在尋找一些標準方法來在我的 Linux 機器中獲取所有已安裝的軟體包,但我想獨立於發行版來實現它。
對於一些特定的發行版,如 Debian/Ubuntu、Fedora/CentOS 等,我在這裡找到了一些非常 好的 答案,但我沒有以獨立於發行版的方式獲取這些資訊。
我的第一個選擇是:列出某些特定位置的所有目錄,例如
/opt
or/usr/bin
。但是使用這種方法,我沒有安裝版本的資訊。在最好的情況下,我可以獲得已安裝軟體包的名稱,僅此而已。一些背景:
我有一個 IP 地址和埠列表(在電子表格中),需要通過 SSH 連接到每個系統並獲取已安裝的軟體包及其版本,但發行版可能會有很大差異。
這將是一項一次性任務,但將來會出現其他電子表格,因此我將多次使用相同的解決方案。
由於我知道電子表格中的一些機器並根據客戶的資訊,我可以推斷該列表是針對伺服器的,只有幾個桌面。正如我之前所說,發行版可能會有很大差異,但可以肯定地說,我擁有大量的 Ubuntu、Debian 和 CentOS 機器。
對於台式機,大多數是帶有一些 macOS 的 Ubuntu。
如果有幫助,我可以使用一些 Bash、Python 或 PHP 腳本。
對於第一個版本,我決定忽略特定語言的包管理器,例如
npm
、rvm
、composer
等,即使這些包是全域安裝的。簡而言之:是否有任何標準方法可以讓所有已安裝的軟體包獨立於發行版?
不完全是,因為今天的一些發行版
tar
用作他們的“包管理器”。但是,您通常可以查看/etc/issue
相關係統的發行版和發布的名稱,並做出一些推論。或者,您可以簡單地檢查二進製文件的存在,例如yum
,up2date
,apt
,emerge
,pacman
,brew
,port
,choco
, 等等。然而,有趣的是,這可能會在(比如)一個 Debian 派生系統上失敗,因此有人決定嘗試開始yum
工作。
您絕對可以開發一個可檢查機器/伺服器/主機的作業系統的 ansible playbook,然後使用相應的包管理器命令列出包名稱。