透過 aptitude 尋找各個狀態的包

透過 aptitude 尋找各個狀態的包

我正在尋找具有以下情況的軟體包:

  1. 已刪除但未清除
  2. 已安裝但未配置

我嘗試過類似的事情

aptitude search '~id'

aptitude search "~iuA"

但都不起作用。

有任何想法嗎?

更新 - 其中一個命令不起作用 -

[$] dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]

zsh: no matches found: ^i[^i]

如果是 zsh 錯誤或其他原因,有什麼想法嗎?

答案1

對於您的aptitude嘗試,請務必注意,這~並不意味著「在包的狀態中尋找以下標誌」。~i是 的簡寫~installed,然後d被解釋為字面意思d,即名稱包含字母的包d。我瀏覽了aptitude(在我的系統上)的文檔,/usr/share/doc/aptitude/html/en/index.html尋找可以滿足您的問題的搜尋模式,但我不確定這是否可能。~action可能會讓你成功一半,但我也不確定是否能獲得狀態。


using 的另一個選擇aptitude是使用dpkg-querywith grep

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^r

這將搜尋位於已刪除狀態,但未清除。

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]

這將搜尋標記為的包已安裝,但尚未完全安裝。如果您不想包含觸發器中待處理的包,^i[ncHUF]則可以使用。


若要僅取得輸出的第二列(套件名稱),您可以使用sed

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^r.R\?\s*//p'

尋找已刪除的包,以及

dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^i[^i]R\?\s*//p'

尋找要安裝但未完全安裝的軟體包。


為了進一步擴展這一點,Debian 軟體包的「狀態」有兩個部分:

  • 行動旨在對包執行。這可以是安裝一個包裹,到消除一個包裹,到抓住一個包裹,或清除一個包裹。

  • 包裹狀態,它描述了系統上包的實際狀態。

上面的dpkg-query呼叫列出了包的操作和狀態,每個字符一個字符,在每一行的開頭處顯示包名稱。

要尋找已刪除但未清除的包,我們只需使用「刪除」操作搜尋包:grep ^r。要查找已安裝或打算安裝但尚未配置的軟體包,我們會搜尋其行動安裝,但其狀態不是已安裝: grep ^i[^i]

答案2

已刪除但未清除的是~c?config-files)。

已安裝但未配置的內容不會被 apt 跟踪,只能被 dpkg 跟踪。包有兩種狀態:實際狀態和期望狀態。 Apt 只關心期望的狀態。已安裝但未配置的軟體包的所需狀態為已安裝。

迪倫·弗雷斯的回答用於 dpkg 查詢。

相關內容