
我正在尋找具有以下情況的軟體包:
- 已刪除但未清除
- 已安裝但未配置
我嘗試過類似的事情
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-query
with 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 查詢。