Package-Management

dpkg-query 僅顯示已安裝的軟體包而不是“rc”

  • March 6, 2020

我在用:

dpkg-query -W -f='${package}\t${version}\t${architecture}\n'

列出已安裝的軟體包,但它還顯示標記為要刪除的軟體包,即狀態rc

如何僅獲取已安裝的軟體包?

dpkg-query不支持過濾狀態,但它可以輸出包的狀態,這允許它們被過濾:

dpkg-query -W -f='${Status}\t${package}\t${version}\t${architecture}\n' | grep "^install ok installed"

dpkg -l是基於的dpkg-query,因此也不能過濾狀態本身。

aptitude提供更強大的搜尋選項,並可用於此;請參閱獲取與模式匹配的已安裝軟體包列表的正確方法?詳情。以下命令將顯示所有已安裝包(且僅已安裝包)的包名稱、版本和體系結構:

aptitude search "~i" -F "%p%v#%E"

請注意,如果包名與系統的主要架構不匹配,則包名將包含架構;例如

zlib1g       1:1.2.11.dfsg-1  amd64
zlib1g:i386  1:1.2.11.dfsg-1  i386      

您使用的命令僅指定包、版本號和體系結構,無論狀態如何,都會列印出來。

如果您只想顯示已安裝的軟體包:

dpkg --list | grep ^ii

狀態將位於第一列,ii表示預計將安裝並安裝。進入的管道grep ^ii僅顯示具有該狀態的包。

如果您只想安裝 amd64 架構的軟體包:

dpkg --list | grep "^ii.*amd64"

那隻會列印包含ii狀態和amd64.

要做同樣的事情awk,只列印第一列有ii和第四列有的行amd64

dpkg --list | awk '$1=="ii" && $4=="amd64"'

引用自:https://unix.stackexchange.com/questions/571450